2017-09-08 3 views
1

Ich habe ein DAO-Recordset, das eine Datensatzgruppe durchläuft und eine SQL-Anweisung für eine andere Tabelle ausführt, die Datensätze dieser Tabelle aktualisiert. Aus irgendeinem Grund mag es nicht, den Recordset-Wert in der Where-Klausel der SQL-Anweisung zu verwenden. Ich habe alles versucht, was mir einfällt.vba Zugriff auf Recordset-Feld in SQL-Klausel

strSQL = "Select A, B FROM TABLE1" 
Set rs = CurrentDb.OpenRecordset(strSQL) 
If Not rs.BOF and Not rs.EOF Then 
rs.MoveFirst 
While (Not rs.EOF) 
    DoCmd.RunSQL "UPDATE TABLE2 SET TABLE2.B = rs!B WHERE TABLE2.A = rs!A;" 
    rs.MoveNext 
Wend 
End If 
rs.Close 

Das einzige Problem ist die Where-Klausel. Es hat kein Problem mit der set-Klausel, obwohl es auf den Wert auf die gleiche Weise zugreift. Ich erhalte einen Datentyp-Mismatch-Fehler in der Where-Klausel.

+0

Was sind die Feldtypen für TABLE1.A und TABLE2.A? Sind sie beide Saiten? – braX

+0

Sie verwenden nicht die Recordset-Werte .... Sie verwenden die Zeichenfolgen "rs! A" und "rs! B" .... Sie müssen die Werte von _rs! A_ und _rs! B_ in die SQL-Abfrage einfügen String ...... Nachschlagen 'String Verkettung' im Internet – jsotola

+1

Good Lord. Schreiben Sie das einfach als einzelne Abfrage. Dies zu tun, indem man eine SQL-Anweisung durchläuft und erstellt, ist verrückt! – JohnFx

Antwort

1

Probieren Sie es wie folgt aus:

"UPDATE TABLE2 SET TABLE2.B = " & rs!B & " WHERE TABLE2.A = " & rs!A 

Und wenn sie Strings sind, dann müssen Sie sie in einfache Anführungszeichen wie folgt setzen:

"UPDATE TABLE2 SET TABLE2.B = '" & rs!B & "' WHERE TABLE2.A = '" & rs!A & "'" 
2

Nur eine einzelne Abfrage schreiben, das Ganze zu tun Ding und Graben Sie die VBA-Code-Schleife. Die aktuelle Version hat Sicherheitslücken, wird schlecht funktionieren und ist zu kompliziert für die Wartung.

update Table2 
inner join Table1 on (Table1.A = Table2.A) 
SET Table2.B = Table1.B 
+0

behoben. Danke für die Hilfe. – JohnFx