[VBA/Access] Debug Queries

[VBA/Access] Debug Queries

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.
Visual Basic:
  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

1) 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.

Visual Basic:
  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
SQL:
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.

2) 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 Abfrage, 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
<code sql>UPDATE myTable SET feld1 = 'test' WHERE id = 15;[/code]

3) 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
Visual Basic:
  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)
Autor
Yaslaw
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen

More resources from Yaslaw