- ベストアンサー
ダブリ登録を防止する方法とは?
- ダブリ入力を防止したい場合、フォームのデータシートビューのコントロールに警告文を表示させる方法があります。
- 重複クエリ・ウィザードを使用し、テーブルのレコードを参照し、Dcountで重複する行数を確認し、2以上の場合に警告文を表示することができます。
- しかし、現在問題が発生しているようで、クエリ結果とDcountの数が一致しないようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
インデックスの設定で解決していれば蛇足ですが・・・ インデックスを指定した場合、エラーが出るのはコントロールの入力時ではなく、レコードの登録時になります。 入力時に、即メッセージを表示したいなら、コントロールで処理すべきだと思います。 例:入力規則を設定 コントロールのプロパティ、データ→入力規則 DCount("*","テーブル名","フィールド名='" & [Forms]![フォーム名]![フィールド名] & "'")=0 現在のレコードはまだ保存されていないので、=0 です。 例:イベントで処理 Private Sub フィールド名_BeforeUpdate(Cancel As Integer) If DCount("*", "テーブル名", "フィールド名='" & Me![フィールド名] & "'") >=1 Then MsgBox "重複しています。" Cancel = True End If End Sub 現在のレコードはまだ保存されていないので、>=1 です。 更新後処理ではなく、更新前処理の方が適しています(キャンセルできるので)。 >Dcountで2以上を返したら警告文を表示、としましたが、うまくいきません。 現在のレコードはまだ保存されていませんので、1以上でエラーにすべきだと思います。
その他の回答 (2)
- mshr1962
- ベストアンサー率39% (7417/18945)
テーブルでユニークになるようにキー設定すればいいのでは? テーブルで重複不可なら、更新した時点でエラーメッセージが出ますけど... 上記が出来ない場合でも重複クエリをカウントでなく、 元のテーブルでDCOUNTで件数が1以上ならメッセージにすればいいのでは?
- p-applepie
- ベストアンサー率53% (156/290)
一番単純な方法です。 テーブル設計時にダブって入力させたくないフィールドのプロパティで インデックスの欄に はい(重複無し)を設定すればそのレコードは 保存されません。
お礼
遅くなりましたが、ありがとうございました。 うまくいきました。