So lesen Sie große Mengen schnell aus verknüpften Tabellen
Code, der eine verknüpfte Tabelle von Anfang bis Ende durchläuft – ein Export, eine Prüfschleife, ein Bericht in VBA –, ist über den Treiber deutlich langsamer, wenn er ein Dynaset öffnet. Mit einer Momentaufnahme liest er dieselben Zeilen in einem Bruchteil der Zeit.
Lösungsübersicht
Access (ACE) liest eine verknüpfte Tabelle auf zwei Wegen, über den Treiber genauso wie über den ODBC-Treiber von SQL Server:
- Momentaufnahme (
dbOpenSnapshot; Berichte, Kombinationsfelder): eine Anweisung, die Zeilen holt der Treiber seitenweise. - Dynaset (
dbOpenDynaset; Formulare, Datenblätter): zuerst nur die Schlüssel, danach jede angezeigte Zeile einzeln mit… WHERE "ID" = ?. Über den Treiber wird daraus je Zeile eine Anfrage an den Dienst.
Ein Formular holt nur die Zeilen, die es zeigt; das fällt nicht auf. In einer Schleife über alle Zeilen kostet jede Zeile über den Treiber eine eigene Anfrage – mit dem festen Preis einer Anfrage über HTTP. Eine Momentaufnahme vermeidet ihn.
Umsetzung
Öffnen Sie Recordsets, die Sie nur lesen, als Momentaufnahme:
Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT Nummer, Bezeichnung FROM Artikel WHERE Gruppe = 'S'", dbOpenSnapshot) Do Until rs.EOF ' … verarbeiten … rs.MoveNext Loop rs.Close- Begrenzen Sie Spalten und Zeilen in der Anweisung: Bedingung und Spaltenliste gehen an den Dienst, der nur das Gefundene liefert.
- Lesen Sie mit
MoveNext, nicht mitGetRows; siehe Hinweise.
Ergebnis: Eine Momentaufnahme liest alle Zeilen mit wenigen Anfragen, ein Dynaset braucht je besuchte Zeile eine. Über ein Netz kommt je Anfrage dessen Umlaufzeit hinzu; beim Dynaset also je Zeile.
Hinweise
GetRowskann bei einem Fehler beim Weiterlesen hängen – mit jedem ODBC-Treiber; siehe Access bleibt bei GetRows hängen.- Verbünde zweier verknüpfter Tabellen schickt Access als eine Anweisung; ohne Adresse für eigene Anweisungen scheitern sie, siehe „ODBC-Aufruf fehlgeschlagen“ bei Summen oder Verbünden.
- Komprimierung spart über langsame Leitungen am meisten; der Treiber entpackt von sich aus, wenn der Dienst komprimiert.
Verwandte Themen
- Unterstütztes SQL – was als Bedingung an den Dienst geht