Bist du bereit für ein Abenteuer à la Indiana Jones? Mit Microsoft Access fühlst du dich wie in einem mysteriösen Tempel. Hier gibt es versteckte Schätze, Schlangen, Spinnen und ab und zu eine tödliche Falle. Die alten Schriftrollen, die alles erklären würden, sind aber leider in den Nebeln der Vergangenheit verloren gegangen, bevor das Internet existierte.
Aber genau das macht den Reiz von Microsoft Access aus. Es hält dich fern von Langeweile und fordert deinen Geist heraus. Doch manchmal kann es auch frustrierend sein, wenn komplexe Abfragen unvorhersehbare Ergebnisse liefern.
Genau das ist mir gestern passiert. Eine komplexe und leistungsstarke verschachtelte Unterabfrage hat unvorhersagbare Ergebnisse geliefert. Ich hatte mal wieder Microsoft Access sabotiert. Es schien, als würde Access je nach Reihenfolge der Unterabfrageausführung unterschiedliche Ergebnisse liefern. Es konnte sich einfach nicht entscheiden, ob ein Wert NULL oder nicht-NULL war.
Also habe ich versucht herauszufinden, ob es einen Unterschied macht, wenn ich die Unterabfrage(s) (Datensatz) als “Dynaset”, “Dynaset (Lazy Update)” oder “Snapshot” einstelle.
Natürlich habe ich zuerst nach Dokumentationen gesucht, die die Unterschiede erklären. Die Access-Hilfedateien sind leider nicht sehr hilfreich. Zuerst hatte auch Google nur wenig Informationen für mich – einer meiner Suchergebnisse auf Seite 1 war ein Beitrag, den ich im Januar 2006 geschrieben habe!
Aber dann stieß ich auf folgende Informationen: “Snapshot-Recordsets sind schneller zu erstellen und abzurufen als Dynaset-Recordsets, verbrauchen jedoch mehr Speicherplatz, da der gesamte Datensatz im Speicher gespeichert wird. Der Nachteil ist, dass du die Datensätze in einem Snapshot-Recordset nicht aktualisieren kannst.”
Es gibt auch die Möglichkeit, “Forward-only-Recordsets” zu verwenden, mit denen du nur vorwärts durch den Datensatz gehen kannst. Letztendlich ist es am besten, die verschiedenen Arten von Recordsets auszuprobieren, um herauszufinden, welche für deine Situation am effizientesten sind.
Der DAO-Objektmodellführer enthält weitere nützliche Informationen über die verschiedenen Arten von Recordsets und ihre Eigenschaften. Hier erfährst du beispielsweise, dass Dynaset ein aktualisierbarer Datensatztyp ist, während Snapshot ein schreibgeschützter Datensatztyp ist. Snapshot-Recordsets eignen sich gut zum Auffinden von Daten oder zum Drucken.
Und dann gibt es noch diese Informationen: “Dynaset: Kann aus einer großen Anzahl von Tabellen gebildet werden, was zu virtuellen Tabellen führt. Speichert nicht auf dem Computer, sondern belegt den Arbeitsspeicher. Änderungen, die in der Datenbank vorgenommen werden, können im Dynaset wiedergegeben werden. Ermöglicht Operationen wie Bearbeiten und Aktualisieren. Snapshot: Erstellt eine Tabelle auf dem Computer und belegt Speicherplatz. Erlaubt keine Bearbeitungs- und Aktualisierungsvorgänge. Kann für eine kleine Datenmenge verwendet werden.”
An anderer Stelle habe ich gelesen, dass ein Snapshot in einer Abfrage häufig viel schneller ist als ein Dynaset, aber dafür mehr Arbeitsspeicher benötigt.
Nachdem ich all diese Informationen gesammelt habe, habe ich einige meiner Unterabfragen in “Snapshot” geändert. Und weißt du was? Das Problem mit den unvorhersehbaren NULL- und NICHT-NULL-Ergebnissen, das wie Schrödingers Katze war, wurde gelöst.
Also, wenn du jemals mit Microsoft Access arbeitest und komplexe Abfragen hast, probiere es mit Snapshot-Recordsets aus. Du wirst überrascht sein, wie viel schneller und effizienter deine Abfragen werden.
Begib dich auf dein eigenes Abenteuer mit Microsoft Access und entdecke die Geheimnisse, die es für dich bereithält!