Während ich mit einer einzigen älteren MS Access-Anwendung zu kämpfen hatte, stand ich vor diesem seltsamen Fehler:
%Vor% Die Anwendung verwendet häufig UNION
sql-Anweisungen. Dies scheint den Zugriff auf das Limit von 2048 offenen Tabellen zu verursachen. Gibt es noch eine andere Chance als diese Gewerkschaften loszuwerden?
Ich hatte dieses Problem, wenn ich verknüpfte externe Tabellen verwende. Das Limit wurde erreicht, weil ca. 10 Excel-Dateien von verschiedenen Anfragen immer wieder verwendet wurden. Die Anzahl der offenen Tabellen war also mehr oder weniger das Produkt von Abfragen und Tabellen.
Ich denke, die Verwendung von Unionen multipliziert dieses Problem ebenfalls.
Die Lösung für mich bestand darin, verknüpfte Excel-Tabellen zuerst in native Tabellen von Access zu kopieren. Führen Sie dann dieselben Abfragen mit den nativen Tabellen aus.
Dies tritt häufig bei großen / komplexen Formularen mit vielen Unterformularen und / oder Kombinationsfeldern / Listenfeldern auf.
Versuche zu tun, was Saurabh sagt. Sind sowieso gute Dinge. Aber ich denke, dass diese Änderungen Ihr Problem nicht lösen werden.
Vor kurzem habe ich das gleiche Problem gelöst. Ich habe festgestellt, dass es immer dann vorkommt, wenn ein bestimmtes Formular geöffnet wurde. Diese Form hatte viele Unterformen und Kombinationen.
Erstens. Versuchen Sie, Ihre Formulare oder Formulare einfacher zu machen: Benötigen Sie wirklich alle Unterformulare? Alle Unterformulare müssen immer geladen werden?
Ich löse mein Problem beim Verteilen von Teilformularen in verschiedenen Seiten eines Tab-Steuerelements. Laden und Entladen von Unterformularen dynamisch im Change-Ereignis.
Zunächst muss nur den Unterformularen auf der ersten Seite die Eigenschaft "SourceObject" zugewiesen werden. Der Rest hat diese Eigenschaft leer.
Im Änderungsereignis versuchen Sie etwas wie folgt:
%Vor%Dies ist eine generische Funktion für die Iteration aller Unterformularsteuerelemente. Wenn es nicht auf der aktiven Seite ist, entlade es. Andernfalls nehmen Sie das Quellobjekt aus der Tag-Eigenschaft.
Sie müssen Verweise auf nicht geladene Teilformulare vermeiden, d. h. wenn "Teilformular1" entladen wird, erhalten Sie eine Fehlermeldung mit folgendem Inhalt: Me.Subform1.Form.InvoiceId
Diese Änderung hat andere Vorteile. Ihr Formular wird schneller geladen und die Datensatznavigation wird schneller.
Die einzige Möglichkeit, dieses Problem zu umgehen, ist die Verwendung eines temporären Satzes von Tabellen. Fügen Sie die Ergebnisse aus Ihren Unionen in temporäre Tabellen ein und verwenden Sie diese, um die Anzahl der Tabellen pro Abfrage zu begrenzen. Normalerweise setze ich meinen temporären Tabellen einen Unterstrich (_tmpCustomers) voran und vernichte sie dann, wenn ich fertig bin.
Ich möchte ricardohzsz für seinen wundervollen Code danken! Es hat mir wirklich geholfen, die Leistung meiner Datenbank zu verbessern und Fehler 3048 zu eliminieren.
Ich würde die Post abstimmen, aber ich habe nicht genug Ruf, um hier zu wählen.
Ich musste einige Änderungen vornehmen, damit es für meine Bedürfnisse funktioniert. (Ich benötigte die Unterformulare, um Zusätze und Bearbeitungen zuzulassen, und benutzte diesen Code, um sie schreibgeschützt zu machen). Ich poste die Änderungen hier für den Fall, dass es auch anderen helfen könnte:
%Vor%End Sub
Ihre Anwendung versucht, zu viele Verbindungen zur Access-Datenbank zu öffnen. Es sind nicht nur die Tabellen in Ihrer SQL-Anweisung, die bis zu 2048 ergeben, sondern auch die Formulare, Berichte, Comboboxen, nicht abgeschlossenen Recordsets usw. ergeben die Anzahl der von Ihrer Anwendung verwendeten Verbindungen. Wenige Dinge können Sie hier ausprobieren:
1. Schließen Sie die Ressourcen (zB Datensätze), die Sie nicht wirklich nutzen.
2. Wenn Sie Domain aggergate-Funktionen (zB DLookup) verwenden, ändern Sie diese mit Elookup, da sie explizit nach sich selbst aufräumt.
3. Sie können Ihren SQL-Code ändern, um Temp-Tabellen zu verwenden.
Hoffe es hilft.
Tags und Links sql excel ms-access ms-access-2010