' module basChangedRecord
' determines if data in a record edited
' in a form has actually been changed
Option Compare Database
Option Explicit
' arrays for storing values from recordsets
Dim aOldVals(), aNewVals()
' Boolean variable to restrict openig of report to button om form
Public blnOpenedFromButton As Boolean
Public Sub StoreOldVals(rst As DAO.Recordset)
' store values of current row in array
aOldVals = rst.GetRows()
End Sub
Public Sub StoreNewVals(rst As DAO.Recordset)
' store values of edited row in array
aNewVals = rst.GetRows()
End Sub
Public Function RecordHasChanged() As Boolean
Dim n As Integer, intlast As Integer
Dim var As Variant
Dim aOld(), aNew()
intlast = UBound(aOldVals) - 1
' loop through array of original values
' and store in new array
ReDim Preserve aOld(UBound(aOldVals))
For Each var In aOldVals()
aOld(n) = var
n = n + 1
Next var
n = 0
' loop through array of edited values
' and store in new array
ReDim Preserve aNew(UBound(aOld))
For Each var In aNewVals()
aNew(n) = var
' if any value has changed then return True
If (IsNull(aNew(n)) And Not IsNull(aOld(n))) _
Or (Not IsNull(aNew(n)) And IsNull(aOld(n))) _
Or aNew(n) <> aOld(n) Then
RecordHasChanged = True
Exit For
End If
n = n + 1
Next var
End Function
Public Function ColumnWillChange(lngContactID, strColumnName As String, varColumnVal As Variant, dtmDateTimeStamp As Date) As Boolean
Dim varNextDateTimeStamp As Variant
Dim strCriteria As String
strCriteria = "ContactID = " & lngContactID & " And DateTimeStamp > #" & Format(dtmDateTimeStamp, "yyyy-mm-dd hh:nn:ss") & "#"
varNextDateTimeStamp = DMin("DateTimeStamp", "qryContactsAudit", strCriteria)
If Not IsNull(varNextDateTimeStamp) Then
strCriteria = "ContactID = " & lngContactID & " And DateTimeStamp = #" & Format(varNextDateTimeStamp, "yyyy-mm-dd hh:nn:ss") & "#"
If DLookup(strColumnName, "qryContactsAudit", strCriteria) <> varColumnVal Then
ColumnWillChange = True
End If
End If
End Function