- 締切済み
accessで重複を防ぎたい
Access初心者です。 フォームで入力時に重複データを入力した場合 エラーメッセージとして受け付けないようにしたいのですが、もっとも簡単な方法を教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
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)
もし、1フィールドでの重複を判定したいということでしたら、No.1,2の方が回答されている 『インデックス』ダイアログボックスを表示させなくても、設定は可能です。 (「複数フィールドの組み合わせで判定したい」「設定したインデックスを一覧的に確認したい」 という場合は、同ダイアログを表示させた方が便利ですが) ○1フィールドで重複したデータを受け付けないようにしたい場合; 1)テーブルをデザインビューで開く 2)重複させたくないフィールドにカーソルを移動 3)画面左下の『インデックス』を、「はい(重複なし)」に設定 4)テーブルを保存 ・・・以上です。 なお、すぐ上の『値要求』を使えば、『インデックス』とは無関係に、空白(Null)を許可 するかどうかを設定できます。 ○2つ以上のフィールドの組み合わせでの重複を避けたい場合; (「ID」と「サブID」の組み合わせでデータを管理する場合など) 1)テーブルをデザインビューで開く 2)メニューで「表示(V)→インデックス(I)」を選択 3)『インデックス:○○』ダイアログボックスの『インデックス名』欄に 適当な名前を入力し、組み合わせの対象となるフィールド群を 『フィールド名』欄に設定 4)『インデックス名』を入力した行にカーソルを移動 5)ダイアログボックスの左下にある『固有』欄に「はい」を設定 6)テーブルを保存 ・・・以上です。 『Null無視』により、上と同様、空白(Null)を許可するかどうかを、『固有』の設定に 関係なく指定できます。
- mshr1962
- ベストアンサー率39% (7417/18945)
#1です。 ツールバーの主キー(鍵型のアイコン)の隣に インデックス(稲妻のアイコン)があります。 これで主キー以外に固有のインデックスが作れます。
お礼
ありがとうございます。 早速試しましたら、#3さんと同じメッセージが出るのですね。 やはり”同じ名前は入力できません”エラーメッセージを出すのはむずかしいのでしょうか? VBAとかいうのを使うのでしょうか?
- mshr1962
- ベストアンサー率39% (7417/18945)
元のテーブルで、固有のキーとして登録すれば重複の登録は出来ませんが... ただ、上記の指定をした場合、空白は許されなくなりますので注意してください。 上記以外だと、そのフィールドの更新前イベントで DCOUNT関数を使って、結果が0でなければメッセージを表示させて元の値に戻すとか?
お礼
ありがとうございます。 "固有のキー"というのは、主キーのことですか? 主キーは、他のフィールドにしているので 具体的にはどうすればよいでしょうか? 初心者過ぎてすみませんが教えてください。
お礼
ありがとうございます。 早速やってみましたら入力はでき、レコード保存時に リレーションシップなんたらというメッセージで 重複を防いでいるのですね。 このときにエラーメッセージを出すのは難しいのですかね? 何も知らなくてすみません。 よろしくお願いいたします。