まず第一にそのがVBAに来るとき、私は初心者のビットをしていますので、私が行うすべては、ヒットとミスのビットですが、通常、私は最終的に問題を把握。 しかし、私は数日間止まってしまったので、この問題を見つけることができませんでした!防止重複したエントリVBA
私は以下の構造を有する以下のフォームとサブフォームを持っています。 (Access2013)
メインフォーム[ジョブ番号](ユーザが関連するフィールドにバーコードをスキャンし、これはある)
サブフォーム[OUT2が】
サブフォームは、[DS](これはここからスキャンバーコード【端Out2]
サブフォーム[DS]フィールド:ID、ジョブ番号、バーコード、説明、日付、ユーザー
私が下のコードで達成しようとしていることは、 [DS] BarCodeフィールドでは、Dcount関数は既にサブフォームコンテナ[DS]に入力されているバーコードのリストをチェックし、 が複数ある場合は重複したエントリを元に戻します。残念ながら、重複エントリが入力されても何も起こっていません。 (エラーでもない)
P.S.テーブル(重複なし)の設定はこのDBでは機能しません。ここで
Private Sub BarCode_BeforeUpdate(Cancel As Integer)
Dim BarCode As String
Dim strLinkCriteria As String
Dim rsc As DAO.Recordset
Set rsc = Me.RecordsetClone
BarCode = Me.BarCode.Text
strLinkCriteria = "[Barcode]=" & "'" & Replace(Me![BarCode], "'", "''")
'Check Items Subform for duplicate BarCode
If DCount("BarCode", "Forms![Job Number]![DS]", strLinkCriteria) > 0 Then
'Undo duplicate entry
Me.Undo
'Message box warning of duplication
MsgBox "Warning Item Title " _
& BarCode & " has already been entered." _
& vbCr & vbCr & "You will now been taken to the record.", _
vbInformation, "Duplicate Information"
'Go to record of original Title
rsc.FindFirst strLinkCriteria
Me.Bookmark = rsc.Bookmark
End If
Set rsc = Nothing
End Sub
私は本当にアクセスを知らないが、ここに手足に出て行く私はあなたがに 'Cancel'パラメータを設定する必要があります確信しています重複を特定したら、「False」にして、プロシージャを終了します。 –
*データベース(*重複していないもの)を設定することは、このDB *では機能しません。*「主キー」*となり、データベースが*正規化されていれば、「うまくいく」はずです。データを標準化し、問題をソースで修正します。 Accessが*ユニーク制約*(別名「自然キー」)をサポートしている場合は、それを追加します。一意性とデータの一貫性/完全性を保証するのは、具体的にはデータベーススキーマの仕事です。コードでそれを行う必要があるIMOは、あなたが修正が必要な問題のあるスキーマを持っていることを意味します。 –
これはデータベースの設計上の問題であり、コードの問題ではありません。 ***データベース上のコードのみの制約を強制しようとする試みは、**失敗することになります**。バックエンドが必要な制約をサポートしていない場合は、スキーマを可能にする方法でスキーマを再設計する適切なバックエンドを見つけます。 – Comintern