我有一个任务来比较2个MSAccess表。它们的结构相同,来自第三方数据源的两次连续导出,相隔1个月(n和n + 1)。 1万条记录,35个字段。
我不一定要知道哪些字段已更新,只要记录中发生了某些变化即可。然后,我的流程将继续相应地处理目标数据库中的增量记录。
我已经ID了n + 1个数据中的插入和删除。这将是每月一次的练习。
对开始此任务有何建议?我宁愿不比较逐字段,逐行。也许等于〜校验和?
谢谢!
答案 0 :(得分:0)
在Erik的建议下(如上所述),我可以确认逐个字段,逐行地遍历表并执行比较非常快。 1万行x 33字段=约1-2秒。
我需要做的一项调整是考虑n或n + 1表中插入或丢失的行。我只是简单地在[ID]上加入了2个表,消除了所有未对齐的情况,然后逐步遍历了结果记录集,比较了成对的列。
Private Sub Command0_Click()
Dim strSQL As String
Dim rs As DAO.Recordset
Dim n, i, j As Integer
' Join the 2 tables into a single recordset, side-by-side
strSQL = "SELECT TestData.*, TestData2.* FROM TestData " & _
"INNER JOIN TestData2 ON TestData.[ID] = TestData2.[ID];"
Set rs = CurrentDb.OpenRecordset(strSQL)
'column-by-column, row-by-row, compare pairs of columns
n = rs.Fields.Count / 2
For i = 0 To n-1
j = i + n
If Not rs.BOF And Not rs.EOF Then
rs.MoveFirst
While (Not rs.EOF)
If Not (Nz(rs.Fields(i)) = Nz(rs.Fields(j))) Then
Debug.Print "ID " & rs.Fields(0) & " | " & rs.Fields(i).Name & " | " & rs.Fields(i) & " <> " & rs.Fields(j)
End If
rs.MoveNext
Wend
End If
rs.MoveFirst
Next i
MsgBox "all done"
rs.Close
Set rs = Nothing
End Sub