Access 2010에서 "트랙 변경"기능이 필요합니다. 약간의 작업으로 트릭을 수행해야하는 this script을 실행했습니다.VBA 내에서 MS Access 2010 양식 컨트롤에 null/nothing/blank 값을 처리하는 방법은 무엇입니까?
분명하고 이해할 만하지만 텍스트 상자에 필요한 모든 경우를 아직 처리하지 못했습니다. (나중에 다른 컨트롤을 구현할 것입니다.) 이것은 작성된 관련 구조입니다. 폼의 Before Update 이벤트에 대한 이벤트 프로 시저라고합니다.
Const cDQ As String = """"
Sub AuditTrail(frm As Form, recordid As Control)
'Track changes to data.
'recordid identifies the pk field's corresponding
'control in frm, in order to id record.
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
'Get changed values.
For Each ctl In frm.Controls
With ctl
'Avoid labels and other controls with Value property.
If .ControlType = acTextBox Then
If .Value <> .OldValue Then
'Add record of change to logging table
End If
End If
End With
Next
Set ctl = Nothing
Exit Sub
ErrHandler:
'Handle error
End Sub
텍스트 상자의 값이 비어있는 한 작동합니다. .Value
또는 .OldValue
중 하나가 null 인 경우 (또는 아무것도 아님 -이 점에 대해 혼동 스럽습니다) 부등호가 실패합니다.
With ctl
내의 부품을 다음과 같이 업데이트 해 보았습니다. 이렇게하면 값 중 하나 (이전 또는 이후)가 null 인 변경 사항을 기록 할 수 있습니다. 주석 처리 된 나머지 부분은 값이 null이지만 변경되지 않는 모든 사례를 기록하려는 나의 시도입니다. 다시 말해서 IsNull(ctl)
은 모든 것을 처리 할 수 있지만 평등의 사례를 다시 필터링하는 방법을 알 수는 없습니다.
If .ControlType = acTextBox Then
If IsNull(ctl) Or .Value <> .OldValue Then
'If Not (Len(.Value & vbNullString) = 0 And Len(.OldValue & vbNullString) = 0) Then
'If oldValueIsNull Then
' varBefore = "--NULL--"
'Else
' varBefore = .OldValue
'End If
'If newValueIsNull Then
' varAfter = "--NULL--"
'Else
' varAfter = .Value
'End If
'Add record of change to logging table
'End If
End If
End If
도움을 주시면 감사하겠습니다. 그냥 모든 사람에 적합하지 않을 수 있습니다 전체 널 문제를 피하기 위해 행복 경우
전체 null 문제에 만족한다면, 'If .Value & ""<> .OldValue & "Then"이라고 말하면 문자열을 비교할 수 있습니다. – Fionnuala
@Remou 답변으로 작성하고 동의하겠습니다. 그건 잘된거야. – John