2012-08-01 2 views
1
Private Sub Form_Current() 
Dim bytoffcut As Byte 
Dim strCriteria 
strCriteria = "[WOID] = " & Forms![frmAddStockBooking]![MouldWO] 

bytoffcut = Nz(DMax("OffcutNo", "dbo_tblOffcuts", strCriteria), 0) + 1 
MsgBox bytoffcut 
Me.txtOffcut.Value = bytoffcut 

Me.WOID.Value = Forms![frmAddStockBooking]![MouldWO] 
Me.txtdate.Value = Now() 

End Sub 

아무도 왜 이것이 작동하지 않는지 말할 수 있습니까? 변수는 예상대로 작동합니다. 새 레코드를 만들 때 bytoffcut이 1 씩 증가합니다. 그러나 테이블을 점검 할 때 txtOffcut에 바인드 된 필드는 증가 된 값 대신 1을 읽습니다.변수를 완전히 무시하는 표

편집 :이 코드는 양식의 On Current 속성에서 사용되고 있습니다. 폼의 버튼을 사용하여 새 레코드를 만들 때 Dmax는 테이블에서 가장 높은 오프 컷 No 값을 찾은 다음 값을 더하는 데 사용됩니다.

이것은 txtbox가 증가하지 않는 오프 컷으로 양식에서 작동하는 것처럼 보입니다. 그러나 증가하는 오프 컷이있는 레코드가 아닌 테이블을 볼 때 모든 레코드가 읽 힙니다.

+0

동시에 여러 사람이 오프 컷을 추가 할 수 있다면 겹쳐 질 수 있으며 @ KFleschner의 제안에 따라 수정 될 수도 있습니다. – Fionnuala

+0

흠, 아니. 새 레코드를 만들 때 값을 증가시키고 싶습니다. – VBwhatnow

+0

방금 ​​시도했는데 여전히 같은 문제가 발생했습니다. 이것은 정말로 수수께끼입니다. – VBwhatnow

답변

0

필자가 쓰고있는 테이블의 기본 키를 생성하여 업데이트되는 여러 레코드 문제를 해결할 수있었습니다.

나는 Access가 레코드를 고유하게 식별 할 수 없기 때문에 ilk의 기준이나 뭔가를 충족시키는 모든 레코드를 편집 할 것이라고 생각합니다. 나는 나 자신을 완전히 확신하지 못한다.

2

테이블의 WOID 필드가 숫자가 아닌 텍스트 인 경우 DMax에서 where 절을 보내보십시오. 또는 날짜.

"[WOID] = " & Forms![frmAddStockBooking]![MouldWO] 
+0

자음보다는 텍스트 나 날짜가 아니라고 생각합니다. 자동 번호는 괜찮습니다. – Fionnuala

+0

예, 감사합니다. 나는 그것을 바로 잡았다. – KFleschner

2

dbo_tblOffcuts[WOID]에 사용 가능한 인덱스없이 큰 연결된 테이블이다 특히, 한 번만 DMax() 식을 평가하기 위해 더 좋을 것이다.

DMax() 표현식이 Null을 반환 할 수 있다면 Nz()을 사용하여 Null을 0으로 변환하십시오. 그런 다음 추가하십시오.

Dim bytoffcut As Byte 
Dim strCriteria 
strCriteria = "[WOID] = " & Forms![frmAddStockBooking]![MouldWO] 
'Debug.Print strCriteria ' 
bytoffcut = Nz(DMax("OffcutNo", "dbo_tblOffcuts", _ 
    strCriteria), 0) + 1 
MsgBox bytoffcut 
Me.txtOffcut.value = bytoffcut 

다른 사용자가 dbo_tblOffcuts을 편집 할 때 이것은 당신이 원하는 걸 줄 수 없습니다.

+0

+1 Nz, 그리고 해고해야 쿼리의 수를 줄일 – SeanC

+0

불행히도 이것은 여전히 ​​동일한 값을 가진 필드의 모든 값의 내 문제를 해결하지 않습니다. 하지만 귀하의 조언을 받아 Nz() – VBwhatnow

+0

내 코드를 표시하도록 내 질문을 편집합니다 – VBwhatnow