In Microsoft Access gibt es zwei Hauptmethoden, um Datenbankabfragen auszuführen: durch gespeicherte Abfragen und mittels direkter SQL-Statements. Jede Methode hat ihre eigenen Vor- und Nachteile und Einsatzgebiete. In diesem Artikel werden wir beide Methoden ausführlich betrachten und ihre Anwendungen in verschiedenen Szenarien diskutieren.
- Gespeicherte Abfragen
- SQL-Statements
Gespeicherte Abfragen
Existiert bereits eine Access-Abfrage, die man ausführen möchte, dann reicht ein DoCmd.OpenQuery
, um dies zu tun. Das ist beispielsweise dann interessant, wenn es sich um Update-, Delete-… Abfragen handelt, da man so die Datenbasis sehr einfach bearbeiten kann.
Vorteile:
- Wiederverwendung: Einmal erstellt, können gespeicherte Abfragen jederzeit aufgerufen und ausgeführt werden.
- Benutzerfreundlichkeit: Sie bieten eine grafische Benutzeroberfläche, die es auch Nicht-Programmierern ermöglicht, komplexe Abfragen zu erstellen.
- Effizienz: Access optimiert gespeicherte Abfragen, was oft zu einer schnelleren Ausführung führt.
- Sicherheit: Sie können mit Parametern arbeiten, was die Sicherheit gegenüber SQL-Injection erhöht.
Nachteile:
- Flexibilität: Weniger flexibel als direkte SQL-Statements, da Änderungen an der Abfragestruktur eine Anpassung der gespeicherten Abfrage erfordern.
- Komplexität: Bei sehr komplexen Abfragen kann die grafische Benutzeroberfläche unübersichtlich werden.
Anwendungsszenarien:
- Regelmäßige Datenberichte
- Einfache Datenmanipulationen (z.B. Aktualisierungen, Löschungen)
- Schnittstellen für Endbenutzer, um bestimmte Datenabfragen durchzuführen
Ausführen von Änderungsabfragen oder Löschabfragen (sog. Aktionsabfragen)
DoCmd.OpenQuery "qry_XXX"
Da derartige Abfragen meist störende Fenster öffnen, die darauf hinweisen, dass XY Datensätze gelöscht/geändert werden, kann man die OpenQuery
-Befehle mit folgendem Code umschließen, und man bekommt keine lästigen Hinweise mehr:
SetWarnings
deaktiviert/aktiviert die Hinweise und Hourglass
ändert den Mauszeiger, damit man weiß, dass etwas geschieht.
Man kann den Abfragen auch Parameter übergeben:
Die entsprechende Query dazu:
Meine bevorzugte Variante ist, die SQL-Abfrage mit Platzhaltern zu versehen und diese mittels VBA zu ersetzen und wieder zurückzuschreiben.
Alternative
Anzeigen von Select-Abfragen:
DoCmd.OpenQuery "qry_Select1", , acReadOnly
SQL-Statement
SQL-Statements sind eine flexiblere Methode, um direkt mit der Datenbank zu interagieren. In Access können sie über VBA (Visual Basic for Applications) ausgeführt werden.
Vorteile:
- Flexibilität: Ermöglicht die dynamische Erstellung und Modifizierung von Abfragen direkt im Code.
- Kontrolle: Bietet volle Kontrolle über die Abfrage und ihre Ausführung.
- Erweiterte Funktionen: Ermöglicht den Einsatz von SQL-Funktionen und -Operationen, die in der grafischen Benutzeroberfläche nicht verfügbar sind.
Nachteile:
- Komplexität: Erfordert Kenntnisse in SQL und VBA.
- Sicherheitsrisiken: Fehlende Parameterisierung kann zu SQL-Injection führen.
- Wartung: Änderungen im Code können aufwendiger sein, vor allem wenn der Code schlecht dokumentiert ist.
Anwendungsszenarien:
- Komplexe Datenmanipulationen, die über die Möglichkeiten der grafischen Benutzeroberfläche hinausgehen
- Dynamische Abfragen, deren Parameter zur Laufzeit festgelegt werden
- Automatisierung von Datenbankoperationen innerhalb von VBA-Skripten
Oder mittels:
Vorteil der zweiten Methode: Man kann die Anzahl der geänderten Teile mittels db.RecordsAffected
ermitteln.
Fazit
Die Wahl zwischen gespeicherten Abfragen und direkten SQL-Statements hängt von verschiedenen Faktoren ab, darunter die Komplexität der Abfrage, die erforderliche Flexibilität, die Benutzererfahrung und der Kontext, in dem die Abfrage ausgeführt wird. In vielen Fällen können eine Kombination beider Methoden und ein Verständnis ihrer Stärken und Schwächen die effektivste Lösung bieten.
Links:
- Executing SQL Statements in VBA Code
- MS Access: Determine number of records affected by an Execute command in Access 2003/XP/2000/97