• ベストアンサー

ACCESS入力での重複キーチェック

ACCESSを初めて使う初心者です。 ACCESSで携帯電話の管理を行うデータベースを作ろうと考えています。 電話番号をキーにして携帯電話台帳にデータを入力するフォームを作りました。 当然、電話番号は重複なしのインデックス項目にしています。 しかしフォームを作って入力を行うと、最初に電話番号を入力した時には、 まだ重複のチェックは行われず、使用者等のすべての項目を入力し終わって、 次のデータの入力を行おうとした時に初めて、「重複キーがある」というような メッセージが出てきます。(一般使用者には分かりにくいメッセージだと思います) これを最初に電話番号を入力した時点で直ちに重複チェックを行って、 重複がある場合にはエラーにして、以下の項目の入力はさせないようにする。 そして適切な指示を表示するには、どうしたらいいでしょうか? マニュアルに書いてある通りにやってみて、一応できたという程度の全くの初心者 です。ピントの外れた質問かもしれませんがどうかよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

電話番号のテキストボックスのプロパティのデータタブで、下記のように設定します。 入力規則 DLookup("電話番号","テーブル名","電話番号='" & [電話番号] & "'") Is Null エラーメッセージ この電話番号は既に登録されてます。別の電話番号を入力してください。

masa123456
質問者

お礼

hatena1919さん。 ありがとうございます。 早速明日会社でやって見ます。

masa123456
質問者

補足

教えて頂いたとおりやってうまくできました。 ありがとうございました。 しかし、ぱっと見てわかりませんでしたが 途中にシングルクォーテーションとか なかなか私には難しいでした。 またよろしくお願いします。

その他の回答 (3)

noname#96417
noname#96417
回答No.4

#1です。 >「レコードセレクタ」というのはどこにあったでしょうか? たいていはフォームの左端です。

masa123456
質問者

お礼

q09さん。 ありがとうございました。 早速、今日会社でやって見ます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

No.2の方の回答で必要十分と思いますが、試しにVBAでやってみました。テーブルから自動作成した単票フォームの、IDフィールド(電話番号を入れている)の連結テキストボックスのコードです。単票フォームを開いた時点で、テーブル(T_testという名前)に既に接続していると思いますが、下記コードは動作する様です。 Private Sub ID_BeforeUpdate(Cancel As Integer) Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim mySQL As String Dim telNo As String telNo = Me.ID Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient mySQL = "SELECT T_test.ID FROM T_test WHERE (((T_test.ID)='" & telNo & " '));" rs.Open mySQL, cn, adOpenForwardOnly, adLockReadOnly If rs.RecordCount = 1 Then MsgBox telNo & "は既に存在します" Me.Undo End If rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub VBAについては、必要なら下記ページなどをご覧下さい。 http://www.mahoutsukaino.com/ac/ac2002/vba/vba03/v03.htm

masa123456
質問者

お礼

mitarashiさん。 ありがとうございます。 少し私には難しそうですが ACCESSを使うならやはりVBAの勉強が必要なんでしょうか? これまでEXCELをマクロもVBAのなしでやってきたのですが 他人に使わせるとか言うことになると必須なのかな・・・

noname#96417
noname#96417
回答No.1

電話番号を入力した直後にレコードセレクタをクリックされたらどうでしょう。(私の記憶に間違いがなければ、)そのレコードが保存され(ようと)しますから、もし主キーの値が重複しているとエラーが出るのではないでしょうか。

masa123456
質問者

お礼

q09さん。 ありがとうございます。 今は家にいてACCESSの画面を確認できないのですが 「レコードセレクタ」というのはどこにあったでしょうか?

関連するQ&A

  • アクセスで重複した入力を知りたい

    アクセスで重複したデータを入力したら以前入力した箇所がわかるようにしたいのですが。 アクセス初心者です。 エクセルで住所録を作成していましたが、データが多すぎて動きが遅くなってきたので、アクセスにデータを移しました。 エクセルではCOUNTIFを使って電話番号を重複して入力した場合にセルを赤くして重複した箇所を知る事が出来るように設定していました。 アクセスでも同じ様な設定にしたいのですがド素人のためまったくわかりません。 年月日・住所・電話番号の欄があります。 どなたか詳しい方教えて下さい。 ド素人でも理解できるように詳しく優しく教えていただけたらたすかります。 アクセス2010です。 お願いします。

  • Access2000重複データの入力について

    アクセス初心者です。 名前 値1 値2 という3つのフィールドにフォーム(表形式)で入力する際、名前が重複した時点で入力出来なくなるような仕掛けが作りたいのですが、どのような方法があるのでしょうか? インデックスの”はい(重複なし)”の設定で重複データの入力回避が出来るという所にやっとたどり着いたのですが、値2の入力終了までメッセージが出ない様なので、入力ロスを感じております。 初歩的な質問だとおもいますがよろしくお願いいたします。

  • accessで重複を防ぎたい

    Access初心者です。 フォームで入力時に重複データを入力した場合 エラーメッセージとして受け付けないようにしたいのですが、もっとも簡単な方法を教えてください。 よろしくお願いします。

  • ACCESSの入力フォームの質問です

    ACCESS初心者です。 1万人弱の携帯電話管理システムを作成中ですが、 判らないところが出てきて困っております。よろしくご指導ください。 電話番号をキーにしたテーブルにいくつかの表をJoinしたクエリを作成し、 電話番号の項目の抽出条件に[携帯電話番号を入力してください] を入れています。 そのクエリを元に単票形式の入力フォームを作成しています。 これを実行するとまず 「携帯電話番号を入力してください」と表示され携帯電話番号を 入力します。これで該当のレコードが表示されます。 必要な更新が済んだら「実行」(ビックリマーク)を押下して再度 「携帯電話番号を入力してください」を出して次の番号を入力。 削除したいときには「削除」(▲Xのようなマーク)で削除。 以上のように作りました。 このやり方自体、ベストなのかどうかわかりませんが一応はこれで 修正と削除ができるのですが、データ追加ができません。 「携帯電話番号を入力してください」のところで追加したい番号を 入力すると、全項目スペースの入力フォームが表示されて入力は できるのですが、肝心の電話番号の欄には、最初のダイアログで 指定した電話番号が連携されず 「フィールドに必要なプロパティがTrueに設定されているために  このフィールド”電話番号”にはNull値は挿入できません。  値を入力してください」 と表示されてしまいます。 ダイアログで指定した数値をフォームの該当フィールドに連結させて レコードを追加するにはどうしたらいいでしょうか? 判りにくい質問になっているかもしれませんが、よろしくお願いします。 ACCESSは2002です。

  • ACCESS重複のチェック

    ACCESSで重複チェックをしたいと思います。 現在は電話番号テーブルだけしかありません。 電話番号のテーブルを主キーを使って重複している場合エラーメッセージを出すというものです。保存ボタンもありません。 Private Sub text電話番号_BeforeUpdate(Cancel As Integer) If IsNumeric(text電話番号) = False Then '数字チェック。 MsgBox "電話番号は数字で入力して下さい。", vbCritical Cancel = True ' 処理を取り消します。 Me.Undo End If Dim strmsg As String strmsg = "重複しています" If Not IsNull(DLookup("[電話番号]", "ダブリチェックテーブル", "[電話番号] = [text電話番号]")) Then MsgBox strmsg, 16, "ダブリチェック" Cancel = True '処理を取り消します。 Me.Undo '元に戻します。 Else Cancel = False '処理を続行します。 End If End Sub これに、企業名と出発日という項目を増やしたいと思います。 ですが、何万とある電話番号を一気に入力して調べているので、一回一回企業名と出発日を入れていると生産性が落ちます。 ですので、企業名と出発日は最初の入力だけで次のレコードに移動してを継続させたいのです。そして電話番号以外にカーソルを行かないようにしたいです。 何か良い方法があればご教授お願いします。 ちなみにいろいろ自分なりに試したのですが、重複してエラーを出した場合に企業名にカーソルが飛んだししてうまくいきませんでした。

  • Access 2000で顧客データ入力する際に氏名の重複入力チェックを行いたいのですが・・・。よろしくお願いします。

    Access 2000で顧客データ入力の業務をしております。フォームにて入力する際に、氏名の重複入力チェックを行いたいのですが・・・。VBAの式を使用する方法があるところまでは分かったのですが、肝心の式が分かりません。よろしくお願いします。

  • Accessで重複データを入力できないようにしたい。

    Access初心者です。 重複データを入力した際、任意のメッセージを表示して入力をできないようにしたいと考えています。 具体的には、 テーブル1に、「姓」「名」「勤務先」があり、 クエリ1をもとにフォーム1が「姓」「名」「勤務先」のテキストボックスを持っています。 フォーム上で「姓」と「名」を入力した際、「姓」&「名」が重複した場合(同姓同名の場合)に、他のコントロールへの移動やデータ保存ができないようにするにはどうしたらいいでしょうか。 できれば、マクロやVBAを使わずに済ませたいと思いますが、簡単な方法をご存知の方、教えていただければ幸いです。 よろしくお願いいたします。

  • Accessでの電話番号重複チェック

    Accessでの電話番号重複チェック 10万件ほどの顧客データが入ったcsvがあります。 「ID」「電話番号(1)」「電話番号(2)」「電話番号(3)」 とデータが並んでおり、この「電話番号(1)(2)(3)」が1つでも他のIDのものと 重複しているものを抽出したいのですが、方法はありますでしょうか。 10万件でExcelが使えなくなってAccessで出来るかなと思い立ったのですが、 あまりにも勝手が違い困り果てています。 とりあえず重複クエリで(1)と(2)(3)の重複は出せたのですが、 (2)が(3)と重複しているものや、(1)同士・(2)同士・(3)同士が重複しているデータの、 重複元・重複先全てのIDを抽出したいのです。 抽出する方法はあるのでしょうか。 宜しくお願いいたします。

  • Access DLOOKUP使用して重複入力を可能にする方法

    Accessのフォームで個人データを入力するよう、色々設定している最中ですが、 重複データを残したいのに、 エラー等出て、どうも上手くいきません・・・>< Accessに詳しい方、どうか教えてください!!!!!!! <現在の設定> ---テーブル「個人リスト」--- ・個人ID(オートナンバー) ・姓 ・名 ・生年月日 ・前回の記録 フォームにてじゃんじゃか入力中に、以前に入力した同一の姓・名・生年月日の人を、 下記設定でわかるようにしました。 (ちなみにこれはある方から教えていただいたものです) ---フォーム「個人リストフォーム」--- (更新前処理:生年月日にて) work1 = DLookup("個人ID", "個人リスト", "生年月日 = #" & Forms!個人リストフォーム!生年月日 & "#" & " AND 姓 = '" & Forms!個人リストフォーム!姓 & "' AND 名 = '" & Forms!個人リストフォーム!名 & "'") If IsNull(work1) Then '重複データが無い場合は NULLが返ります else  msgbox("個人ID=" & work1 & "に同じ人がいます")  end if これで、同一の人がいたらメッセージで以前入力時の個人IDが出ます。 *私のしたいこと* (1)同一の人は新個人IDを取って入力したい。 (2)上記メッセージが出たら、その場で前回のデータ(フォーム)を閲覧できるようにしたい。   ※現在、閲覧しようとするとエラーが出ます。   エラー「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。      重複の値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください」   ※一度エラーが出ると、入力した姓・名・生年月日を書き換えようとしても、同じエラーが出て書き換えできない。。 (3)できることなら、以前の入力個人IDを「前回の記録」に反映させるようにしたい。   例)前回の記録 [ID858、ID1085] ※何度でも・・・ (4)できることなら!(2)前回のデータ(フォーム)が別画面でぱっと出るようにしたい!  こんな無謀?な希望をかなえてくれる方、是非是非ご伝授ください! よろしくお願いいたします!

  • Access フォームでの重複規制

    フォームで「A番号(仮)」と「B番号(仮)」を入力するのですが、それぞれの番号では重複を許すのですが、A番号とB番号の組み合わせの重複はしないように、入力時にエラーメッセージ(重複しています)を表示したいのですが、分かる方、教えていただけませんでしょうか。

専門家に質問してみよう