2017-03-02 78 views
0

我希望您的幫助能夠解決兩個表之間的匹配問題,並通過字段返回不匹配的記錄以指定哪個字段無法匹配。查找無與倫比的記錄並指定字段

請注意,每個表格包含30多個字段。

+0

您是否在尋找SQL查詢,它在兩個不同的表右側返回不匹配值的輸出。 – Object

+0

是的,並添加新的表達式指定在哪個字段中存在不匹配的數據 – Mahmoud

+0

每個表格內有很多字段(超過30個字段)如何處理? – Mahmoud

回答

0

你可以使用記錄集,但是如果你的表很長,這可能需要一段時間。這絕對沒有優化,但考慮到你提供的信息很少,我不想投入大量時間。

我假設你的表結構相同,排序相同,並且具有相同的記錄數。如果不是,儘管你認爲合適,隨意適應這一點,但你應該能夠了解我在做什麼。

當發現不匹配時,它將在立即窗口中輸出Table1的字段和行號。如果你想恢復所有的字段值,你也可以將它插入臨時表中,但是我不想走得太遠。所以這是有侷限性的:

Public Function FindMisMatches(Table1 As String, Table2 As String) 

Dim db As DAO.Database 
Dim rs1 As DAO.Recordset 
Dim rs2 As DAO.Recordset 
Dim i As Integer 
Dim Row As Integer 

On Error GoTo PROC_ERR 

Set db = CurrentDb 
Set rs1 = db.OpenRecordset(Table1, dbOpenSnapshot, dbReadOnly) 
Set rs2 = db.OpenRecordset(Table2, dbOpenSnapshot, dbReadOnly) 

rs1.MoveFirst 
rs2.MoveFirst 
Row = 1 
Do Until rs1.EOF Or rs2.EOF 
    'Assuming both tables have identical structure 
    For i = 1 To rs1.Fields.Count - 1 
     If rs1.Fields(i).Value <> rs2.Fields(i).Value Then 
      Debug.Print "Mismatch in field " & rs1.Fields(i).Name & " on row " & Row 
     End If 
    Next i 
rs1.MoveNext 
rs2.MoveNext 
Row = Row + 1 
Loop 

Debug.Print "End of recordset" 

Set rs1 = Nothing 
Set rs2 = Nothing 
Set db = Nothing 
Exit Function 

PROC_ERR: 
    MsgBox "Error: " & Err.Number & "; " & Err.Description 
    Set rs1 = Nothing 
    Set rs2 = Nothing 
    Set db = Nothing 
End Function 
+0

謝謝克里斯託弗D.但在哪些代碼應該添加? – Mahmoud

+0

將此添加到模塊。在即時窗口中,鍵入:'?modulename.FindMisMatches(「table1name」,「table2name」)',其中用對象佔位符替換模塊和表的實際名稱。然後按回車。 – MoondogsMaDawg

+0

感謝克里斯託弗D.它工作得很好:) 有沒有辦法自動運行代碼並在窗體上顯示結果 – Mahmoud