0

私のフィールドの BeforeUpdate イベントでは、フィールド SurveyID での重複を禁止するように dcount を設定しています。これはうまく機能しますが、過去の記録でユーザーが誤って SurveyID の編集を開始し、キャンセルしようとした場合 (誤って SurveyID フィールドを選択し、入力を開始し、それを消去して SurveyID を入力した場合) を除きます。その SurveyID を (実際にはそうではありませんが) 重複として読み取り、ID を保持することを許可しません。この後、SurveyID をリセットすることで半分の回避策を既に実行しているため、上記のシナリオにある場合は、少なくとも ID を保持できます。私のコードでこれが起こらないようにする方法があるかどうか、私が本当に知りたいこと。2 つの異なる ID コードを使用できるため、SurveyId は主キーではありません。

これが私の現在のコードです

Private Sub SurveyID_BeforeUpdate(Cancel As Integer)
'checks for duplicates'
If DCount("SurveyID", "test", "SurveyID=" & Nz(Me.SurveyID, 0)) > 0 Then
    Beep
    MsgBox "The Survey ID number you have entered is a duplicate. Please double check that the number you entered is correct. If it is correct, please X."
    Me.SurveyID.Undo
    Cancel = True
End If
End Sub
4

2 に答える 2

-1

これがまさに、バインドされたフォームを持つことが悪い考えである理由です。フォームをテーブルにバインドしないでください。エントリを元に戻すのはせいぜい不安定で、バインドされたフォームが機能する方法は、フィールドを変更するとすぐにレコードがテーブルに書き込まれることです。はい、元に戻すコマンドがありますが、信頼できません。

フォームからテーブルをバインド解除し、[送信] ボタンを押したときにレコードを更新するか (既に存在する場合)、新しいレコードを書き込むコードを記述します。コーディングが多くなり、Access の理解を深める必要がありますが、これは適切な方法です。

于 2016-01-29T18:16:39.353 に答える