User Tools

Site Tools


vba:tutorials:debugquery

This is an old revision of the document!


[VBA] [Access] Debug Queries

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 & ";"
	Call DoCmd.RunSQL(sql)

Lösung

Um mit der Nummerierung der Schritte Parallel zu [PHP][MySQL] Debug Queries bleiben beginnt es hier mit Punkt 2)

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
'    Call DoCmd.RunSQL(sql)

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) der Access-Datenbank. Dort erstellen wir eine neue Ansicht, wechseln auf die SQL-Ansicht und kopieren 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 das error_reporting() sowie unser echo() 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 & ";"
	Call DoCmd.RunSQL(sql)
vba/tutorials/debugquery.1418979354.txt.gz · Last modified: 19.12.2014 09:55:54 by yaslaw