2017-01-10 21 views
2

먼저 VBA에 관한 초보자가 약간 있습니다. 그래서 내가하는 모든 일은 적중과 실패이지만 일반적으로 결국 문제를 파악합니다. 그러나 이번에는 며칠 동안 붙어있어 문제를 찾을 수없는 것 같습니다!중복 항목 방지 VBA

다음 구조 및 하위 형식이 있습니다. (Access2013)

기본 폼 [작업 번호 (사용자가 해당 필드에 바코드를 스캔 이것이)
하위 폼 [아웃 2]가
하위 폼 [DS] (이 어디에서 스캔 바코드 [아웃 2]
Subform [DS] fields : ID, 작업 번호, 바코드, 설명, 날짜, 사용자

아래 코드로 달성하고자하는 것은 'The Before Update'이벤트에 있습니다. [DS] BarCode 필드에서 Dcount 함수는 하위 양식 컨테이너 [DS]에 이미 입력 된 바코드 목록을 확인하고 이 둘 이상이면 중복 된 항목을 실행 취소합니다. 불행히도 중복 된 항목을 입력하면 아무 일도 일어나지 않습니다. (오류가 아님)

P. 이 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' 매개 변수를 설정해야 확실 해요 복제본을 확인한 후 '거짓'을 선택하고 절차를 종료하십시오. –

+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

게시 한 코드를 사용했지만 Criteria = "[Barcode] = '"및 Replace (BarCode, "'," '' ") &" ' "에서 예상되는 최종 문 오류 인 것 같습니다. – CLS

+0

예, 항공 코드, 미안. 해당 닫는 괄호를 제거 할 수 있어야합니다. – Gustav