繁体   English   中英

MSAccess:区分两个表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM