[英]MSAccess: Diff Two Tables?
我有一个任务来比较2个MSAccess表。 它们的结构相同,来自第三方数据源的两次连续导出,相隔1个月(n和n + 1)。 10K记录,35个字段。
我不必知道哪个字段已更新,仅是记录中发生了更改。 然后,我的进程将继续相应地处理目标数据库中的增量记录。
我已经在n + 1数据中标识了插入和删除。 这将是每月一次的练习。
对开始这项任务有什么建议吗? 我宁愿不比较逐字段,逐行。 也许相当于〜校验和?
谢谢!
根据Erik的建议(上文),我可以确认逐个字段,逐行地遍历表并执行比较非常快。 10K行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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.