먼저 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
정말 액세스 모르겠지만, 여기에 사지에 외출 난 당신이에'Cancel' 매개 변수를 설정해야 확실 해요 복제본을 확인한 후 '거짓'을 선택하고 절차를 종료하십시오. –
* 테이블 (중복 없음) 설정은이 DB *에서 작동하지 않습니다. "문제"는 기본 키 *가되며 데이터베이스가 * 정규화 된 *이면 "정상 작동"해야합니다. 데이터를 표준화하고 소스에서 문제를 해결하십시오. Access에서 * 고유 제한 조건 * (일명 "자연 키")을 지원하는 경우 추가하십시오. 독창성과 데이터의 일관성/무결성을 보장하는 것은 특히 데이터베이스 스키마의 작업입니다. 코드로이 작업을 수행해야하는 IMO는 문제가되는 스키마가 필요하다는 것을 의미합니다. –
그래, 이건 데이터베이스 디자인 문제이지 코드 문제는 아니야. *** 데이터베이스에 코드 제약 조건을 적용하려는 *** 시도는 ** 실패 할 운명입니다 **. 백엔드에서 필요한 제약 조건을 지원하지 않는 경우 스키마를 수행하거나 가능하도록 재 설계하는 적절한 백엔드를 찾으십시오. – Comintern