SQL und VBA
Wofür braucht man SQL-Anweisungen in VBA?
Ganz einfach, man kann damit die Datenherkunft von Objekten zur Laufzeit zuweisen,
bestehende Abfragen verändern oder auch Aktionsabfragen ausführen.
Eine in VBA zusammengestellte Abfrage ist wesentlich flexibler, als eine statische Abfrage.
Wie macht man das? Als 1. erstellt man sich eine oder mehrere Variablen, die den SQL-Code enthalten und baut diese dynamisch auf.
Danach übergibt man sie dem Objekt an der 'passenden' Stelle. Ein paar Beispiele:
Dim strSQL As String strSQL = "SELECT * " strSQL = strSQL & "FROM Tabelle strSQL = strSQL & "WHERE Feld = Wert"
Für die Zuweisung als Datenherkunft eines Formulars verwendet man nun die RecordSource:
'Hauptformular: Me.RecordSource = strSQL 'Unterformular: Me!UnterformularSteuerelement.RecordSource = strSQL
Für ein Kombinations- oder Listenfeld verwendet man die RowSource. Eventuell muss man auch noch den Typen auf eine Tabelle/Abfrage ändern:
Me!Kombifeld.RowSource = strSQL Me!Listenfeld.RowSourceType = "Table/Query" Me!Listenfeld.RowSource = strSQL
Für Abfragen kann man das QueryDef-Objekt aus der DAO-Bibliothek verwenden:
Dim strSQL As String Dim qdf As DAO.QueryDef strSQL = "SELECT * " strSQL = strSQL & "FROM Tabelle strSQL = strSQL & "WHERE Feld = Wert" Set qdf = DBEngine(0)(0).QueryDefs("DeineAbfrage") qdf.SQL = strSQL Set qdf = Nothing
Und um Aktionsabfragen auszuführen kann man die Execute-Methode der CurrentDb oder auch der DBEngine verwenden:
Dim strSQL As String strSQL = "DELETE * FROM Tabelle" DBEngine(0)(0).Execute strSQL
Der Vorteil gegenüber des DoCmd.RunSQL ist, dass man die Warnmeldungen nicht erst ausschalten und dann wieder einschalten muss.
Ein weiterer Vorteil ist, dass man sich mit der Option dbFailOnError auch eine Fehlermeldung ausgeben lassen kann und ein Rollback stattfindet.
SELECT Feld1 & " - " & Feld2 FROM Tabelle strSQL = "SELECT Feld1 " & Chr(38) & Chr(34) & " - " & Chr(34) & Chr(38) & " Feld2 FROM Tabelle