2017-01-10 22 views
2

まず第一にそのが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 
+2

私は本当にアクセスを知らないが、ここに手足に出て行く私はあなたがに 'Cancel'パラメータを設定する必要があります確信しています重複を特定したら、「False」にして、プロシージャを終了します。 –

+3

*データベース(*重複していないもの)を設定することは、このDB *では機能しません。*「主キー」*となり、データベースが*正規化されていれば、「うまくいく」はずです。データを標準化し、問題をソースで修正します。 Accessが*ユニーク制約*(別名「自然キー」)をサポートしている場合は、それを追加します。一意性とデータの一貫性/完全性を保証するのは、具体的にはデータベーススキーマの仕事です。コードでそれを行う必要があるIMOは、あなたが修正が必要な問題のあるスキーマを持っていることを意味します。 –

+2

これはデータベースの設計上の問題であり、コードの問題ではありません。 ***データベース上のコードのみの制約を強制しようとする試みは、**失敗することになります**。バックエンドが必要な制約をサポートしていない場合は、スキーマを可能にする方法でスキーマを再設計する適切なバックエンドを見つけます。 – Comintern

答えて

0

は、これを処理する方法である:

Private Sub BarCode_BeforeUpdate(Cancel As Integer) 

    Dim rsc As DAO.Recordset 
    Dim BarCode As String  
    Dim Criteria As String 

    Set rsc = Me.RecordsetClone 

    BarCode = Nz(Me!BarCode.Value) 
    Criteria = "[Barcode] = '" & Replace(BarCode, "'", "''") & "'") 
    rsc.FindFirst Criteria 
    Cancel = Not rsc.NoMatch 

    If Cancel = True Then 
     ' Message box warning of duplication 
     MsgBox "Warning Item Title " _ 
      & BarCode & " has already been entered." _ 
      & vbCrLf & vbCrLf & "You will now been taken to the record.", _ 
      vbInformation, "Duplicate Information" 
     ' Go to record of original Title 
     Me.Bookmark = rsc.Bookmark 
    End If 

    Set rsc = Nothing 

End Sub 
+0

は、あなたが投稿コードがしかし基準で期待されるエンド文のエラーのようです中古=「[バーコードが] =「」&置き換え(バーコード、「」」、 『『』』)&「'」) – CLS

+0

はい、そうです、航空コード、申し訳ありません。その閉じ括弧を削除できるはずです。 – Gustav

関連する問題