• 締切済み

accessで重複を防ぎたい

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

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

No.3です。 > このときにエラーメッセージを出すのは難しいのですかね? テーブルでの入力・編集には対応できなくなりますが、フォームからの入力・編集に 限定してよいのでしたら、対応法は幾つかあると思います。 No.1の方の回答にあるように、更新前イベントにチェック機能を組み込むのも手ですが、 「マクロやVBAはちょっと・・・」と思われるのでしたら、『入力規則』を設定してやるのが 簡単だと思います。 (但し、複数フィールドの組み合わせで重複チェックを行う場合は、ややこしくなります;  従って、今回はそちらの説明は割愛させていただきます) ○『入力規則』と『エラーメッセージ』の設定方法;  1)フォームをデザインビューで開く  2)重複チェックを行うコントロール(テキストボックス等)をダブルクリックして、   そのコントロールのプロパティシートを開く  3)プロパティシートの『データ』タブをクリック  4)『入力規則』欄に「Dcount("*","テーブル1","[ID]=[TB_ID]")=0」と入力  5)『エラーメッセージ』欄に、出させたいメッセージを入力   (改行を入れて複数行にしたい場合は、Shift+Enterキーを押します)  6)フォームを保存 ・・・以上です。 なお、  ・重複チェックを行うテーブル=「テーブル1」  ・重複チェックを行いたいフィールドの名前=「ID」  ・「ID」を表示させるためのテキストボックス=「TB_ID」   (「TB_ID」テキストボックスの『コントロールソース』=「ID」) として説明しています。 実際のテーブル名・フィールド名・コントロール名に合わせて、「テーブル1」 「ID」、「TB_ID」の部分を変更して下さい。 上記の設定をすると、重複データを入力した場合にはメッセージが表示され、 重複しないデータを入力し直すか、Escキーを押して入力を取り消さない限り、 他のコントロールに移動したりデータを保存したりすることができなくなります。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

もし、1フィールドでの重複を判定したいということでしたら、No.1,2の方が回答されている 『インデックス』ダイアログボックスを表示させなくても、設定は可能です。 (「複数フィールドの組み合わせで判定したい」「設定したインデックスを一覧的に確認したい」  という場合は、同ダイアログを表示させた方が便利ですが) ○1フィールドで重複したデータを受け付けないようにしたい場合;  1)テーブルをデザインビューで開く  2)重複させたくないフィールドにカーソルを移動  3)画面左下の『インデックス』を、「はい(重複なし)」に設定  4)テーブルを保存  ・・・以上です。  なお、すぐ上の『値要求』を使えば、『インデックス』とは無関係に、空白(Null)を許可  するかどうかを設定できます。 ○2つ以上のフィールドの組み合わせでの重複を避けたい場合;   (「ID」と「サブID」の組み合わせでデータを管理する場合など)  1)テーブルをデザインビューで開く  2)メニューで「表示(V)→インデックス(I)」を選択  3)『インデックス:○○』ダイアログボックスの『インデックス名』欄に   適当な名前を入力し、組み合わせの対象となるフィールド群を   『フィールド名』欄に設定  4)『インデックス名』を入力した行にカーソルを移動  5)ダイアログボックスの左下にある『固有』欄に「はい」を設定  6)テーブルを保存  ・・・以上です。  『Null無視』により、上と同様、空白(Null)を許可するかどうかを、『固有』の設定に  関係なく指定できます。

fujiko2006
質問者

お礼

ありがとうございます。 早速やってみましたら入力はでき、レコード保存時に リレーションシップなんたらというメッセージで 重複を防いでいるのですね。 このときにエラーメッセージを出すのは難しいのですかね? 何も知らなくてすみません。 よろしくお願いいたします。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

#1です。 ツールバーの主キー(鍵型のアイコン)の隣に インデックス(稲妻のアイコン)があります。 これで主キー以外に固有のインデックスが作れます。

fujiko2006
質問者

お礼

ありがとうございます。 早速試しましたら、#3さんと同じメッセージが出るのですね。 やはり”同じ名前は入力できません”エラーメッセージを出すのはむずかしいのでしょうか? VBAとかいうのを使うのでしょうか?

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

元のテーブルで、固有のキーとして登録すれば重複の登録は出来ませんが... ただ、上記の指定をした場合、空白は許されなくなりますので注意してください。 上記以外だと、そのフィールドの更新前イベントで DCOUNT関数を使って、結果が0でなければメッセージを表示させて元の値に戻すとか?

fujiko2006
質問者

お礼

ありがとうございます。 "固有のキー"というのは、主キーのことですか? 主キーは、他のフィールドにしているので 具体的にはどうすればよいでしょうか? 初心者過ぎてすみませんが教えてください。

関連するQ&A

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

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

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

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

  • Access2000 「重複する値を使用できるように再定義して下さい」のエラー回避策。

    Access2000 サブフォームにデータ入力していますが、1件目は重複内容があってもエラーは出ないのに、2件目の項目データ入力時に「重複する値を使用できるように再定義して下さい」のエラー。インデックスで重複有りにしても同様のエラーで入力できません。Access初心者につき、簡単なことかもしれませんが、どうか教えてください。

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

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

  • アクセス97で重複データのときに

    アクセス97で、テーブルにデータを入力する時にそのフィールドで値が重複していた場合、メッセージを出すやり方を教えてください。 インデックスで重複なしにはできません。 (重複する場合もあるのです。ただし、確認のためメッセージだけは出したいのです。) よろしくお願い致します。

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

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

  • 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)前回のデータ(フォーム)が別画面でぱっと出るようにしたい!  こんな無謀?な希望をかなえてくれる方、是非是非ご伝授ください! よろしくお願いいたします!

  • Access2000の重複チェック

    現在あるデータとあるフィールド内において値が重複してある場合こちら側からエラーを出したいのですがどうすればいいですか? テーブル名:テナントマスタ フォーム:txtビル区分、txtテナントコード、…etc テナントマスタ ビル区分 テナントコード ----------------------- 01 100 01 101 02 102 02 103 ここに新たにフォーム上でビル区分、テナントコードを入力し、この値がそれぞれ01、101だったときbtn登録をクリックしたときこちらからエラーをだしたいのです! どうかよろしくお願いします!!

  • ACCESS2000の主キー重複について

    いつもお世話になっています。 早速ですが、お教えください テーブル名:AMaster フィールド名:B があります。 「B」は主キーになっていまして、ユーザーが任意に数字をいれることになります。 主キーになっていますので基本的には重複しないのですがユーザーの押し間違いなどによって重複してしまった場合 [Microsoft][ODBC Microsoft Access Driver] インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 といったエラーメッセージが出ます。これは出ても構わないのですがツールバーの「戻る」でしか今後の操作ができなくなってしまうので(ユーザーはPC超初心者)何らかの形でエラーメッセージとともに任意のページへ戻れるようにしたいと考えています。 つきましては、「B」フィールドにあるデータとこれから入力される数値が重複していたら・・・という記述をお教えいただきたいと思います。 ASPにて作成していますのでそれに対応した記述ですとありがたいです。 過去のログに似たようなものがありましたがこちらを参照してもボクにはわかりませんでした。 http://okweb.jp/kotaeru.php3?q=357614 ボクも何分初心者なのでわからないことだらけですがよろしくお願いします。

  • Access2007 クエリが読み取り専用になってしまう

    Access初心者です。 3つのテーブルのデータ(全て)をクエリに抽出して、そのクエリからフォームを作成し、フォーム上からデータ入力をしていきたいと考えております。 しかし、上記方法で作成したフォームは入力ができなく、ヘルプで調べたらフォームが読み取り専用になっているようでした。 いろいろ検索したのですが、どうやら更新可能なクエリにする必要があるみたいなのですが、その方法が分かりません。 宜しくお願いします。

専門家に質問してみよう