Bisher war ausschließlich von lesenden Abfragen die Rede. Dafür gibt es zwei Gründe: Lesende Vorgänge machen im normalen Datenbankbetrieb den Löwenanteil der Zugriffe aus und der Stoff mußte in einem zweistündigen Vortrag Platz finden.
Zu Schreibzugriffen sollen daher nur einige kleine Anmerkungen gemacht werden.
Wenn man eine Aufgabe wie Datensatzlöschung, Änderungen oder Anfügen mit einer Aktionsabfrage oder einem SQL-Statement lösen kann, ist das fast immer die schnellere Lösung, verglichen mit einem Recordset-Objekt in einer VBA-Prozedur.
Man kann gespeicherte Aktionsabfragen oder auch SQL-Statements mit CurrentDb.Execute ausführen lassen.
Es gibt im wesentlichen zwei Ausnahmen, in denen eine VBA-Lösung deutliche Vorteile bieten kann:
Einfügen vieler Datensätze per Code, die nicht mit einem SELECT erfaßt werden können
Wenn man Daten beispielsweise aus einer Excel-Tabelle einzufügen hat, ist INSERT INTO …SELECT … besser als ein Recordset.AddNew in einer Schleife.
Wenn aber die Daten nicht relational vorliegen oder aus Textimporten stammen, ist die Recordset.AddNew-Methode günstiger, als in einer Schleife immer wieder Execute mit INSERT INTO … VALUES(…) auszuführen.
Aufgaben, die Zwischenspeicherung oder Schleifen erfordern
Man kann mit viel Zauberei mit reinem SQL auf Feldwerte eines durch ein Sortierkriterium festgelegten Vorgängerdatensatzes zugreifen. Wenn man statt dessen eine VBA-Funktion schreibt, die diesen Zugriff kapselt, und sich diesen Wert in der Abfrage ausgeben läßt, geht das erheblich schneller.