User Tools

Site Tools


vba:tutorials:debugquery

[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
vba/tutorials/debugquery.txt · Last modified: 13.02.2019 09:24:39 by yaslaw