2017-03-02 1 views
0

Ich möchte Ihre Art Hilfe geben eine Lösung für die Übereinstimmung zwischen zwei Tabellen und die Rückgabe nicht übereinstimmende recorda mit einem Feld angeben, welches Feld nicht übereinstimmte.Finden Sie nicht übereinstimmende Datensatz und geben Sie das Feld

Beachten Sie, dass jede Tabelle mehr als 30 Felder enthält.

+0

Suchen Sie nach SQL-Abfrage, die die Ausgabe von nicht übereinstimmenden Wert in zwei verschiedenen Tabellen richtig zurückgibt. – Object

+0

Ja genau und neuen Ausdruck hinzufügen, in welchem ​​Feld gibt es nicht übereinstimmende Daten – Mahmoud

+0

Es gibt eine Menge Felder in jeder Tabelle (mehr als 30 Feld), wie kann behandelt werden? – Mahmoud

Antwort

0

Sie können Recordsets verwenden, aber wenn Ihre Tabellen lang sind, kann dies eine Weile dauern. Dies ist absolut nicht optimiert, aber wenn man bedenkt, wie wenig Information Sie zur Verfügung gestellt haben, möchte ich nicht viel Zeit investieren.

Ich nehme an, Ihre Tabellen sind identisch in der Struktur, identisch sortiert und haben die gleiche Anzahl von Datensätzen. Wenn nicht, dann kannst du das anpassen, wie du es für richtig hältst, aber du solltest in der Lage sein, sich ein Bild von dem zu machen, was ich mache.

Es wird die Feld- und Zeilennummer von Table1 im unmittelbaren Fenster ausgegeben, wenn eine Abweichung gefunden wird. Sie könnten es auch in eine temporäre Tabelle einfügen, wenn Sie alle Feldwerte wiederherstellen möchten, aber ich möchte auch nicht so weit gehen. Dies hat also Einschränkungen:

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

Danke Christopher D. Aber in welche der Code sollte hinzugefügt werden? – Mahmoud

+0

Fügen Sie dies einem Modul hinzu. Geben Sie im nächsten Fenster Folgendes ein: '? Modulename.FindMisMatches (" table1name "," table2name ")' wobei Sie die Objektplatzhalter durch die tatsächlichen Namen Ihres Moduls und Ihrer Tabellen ersetzen. Drücken Sie dann die Eingabetaste. – MoondogsMaDawg

+0

Vielen Dank Christopher D. es funktioniert gut :) Gibt es eine Möglichkeit, den Code automatisch auszuführen und ein Ergebnis auf dem Formular anzeigen – Mahmoud

Verwandte Themen