======[VBA][Access] Debug Queries====== //Ein Tutorial zum Debuggen von SQL unter VBA in MS Access.// =====Ausgangslage===== Immer und immer wieder kommt man an den Punkt, dass ein in VBA zusammengesetztes Query nicht das macht was man will. Darum hier mal eine Anleitung, damit ich sie nicht immer wieder schreiben muss. Wir haben einen einfachen Code, der ein Update auf die Datenbank macht. Nun updated dieser Code aber nichts in der Datenbank und wir finden noch nicht heraus warum. In der folgenden Anleitung werden wir anhand dieses Beispiels sehen wie man eine einfache Fehleranalyse durchführen kann um solche Probleme zu lösen. Dim value, sql As String Dim where As Integer value = "test" where = 15 sql = "UPDATE myTable SET feld1 = " & value & " WHERE id = " & where & ";" CurrentDb.execute sql =====Lösung===== ====1) Report Error ==== Sicherstellen, dass ein Fehler generiert wird, wenn das sql ausgeführt wird. Dazu den execute durch den Parameter dbFailOnError ergänzen CurrentDb.execute sql, dbFailOnError ====2) Query-String ausgeben==== Wir können den generierten Query-String testen. Dazu geben wir diesen mittels Debug.Print aus. Dies schreibt den SQL-String in das Direktfenster von VBA. Dim value, sql As String Dim where As Integer value = "test" where = 15 sql = "UPDATE myTable SET feld1 = " & value & " WHERE id = " & where & ";" Debug.Print sql ' CurrentDb.execute sql, dbFailOnError In der Ausgabe erscheint dann etwa das Folgende UPDATE myTable SET feld1 = test WHERE id = 15; Mit diesen Informationen können andere Programmierer in Foren etc. besser helfen als 'nur' mit der Meldung 'Es geht nicht'. Geübte SQL-Leser sehen hier sofort den Fehler. test ist natürlich kein Feld sondern ein String und sollte in '...' gesetzt werden. ====3) Testen mit Views==== Um das Sql zu verfeinern und zu testen kann man dieses nun aus der Ausgabe kopieren.Wechseln auf die Ansichten (Views/Abfragen) der Access-Datenbank. Dort erstellen wir eine neue Ansicht, wechseln auf die SQL-Ansicht und fügen unser SQL-Statement ein. Hier können wir testen und schauen was falsch ist. Anschliessend die Erkenntnisse im Code einpflegen. Unser korrigiertes und getestete SQL sieht dann so aus UPDATE myTable SET feld1 = 'test' WHERE id = 15; ====4) Korrektur einpflegen==== Zum Schluss müssen wir nur noch den debug.print wieder entfernen und unseren koriggiertes SQL in den Code einpflegen. Und so sieht dann der funktionierende Code aus Dim value, sql As String Dim where As Integer value = "test" where = 15 sql = "UPDATE myTable SET feld1 = '" & value & "' WHERE id = " & where & ";" CurrentDb.execute sql, dbFailOnError {{tag>VBA MS_Access}}