MS Access 2010: "Es können keine weiteren Datenbanken geöffnet werden."

8

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?

    
Christian 25.09.2012, 08:41
quelle

5 Antworten

4

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.

    
msjav 25.09.2012, 13:40
quelle
2

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.

    
ricardohzsz 25.09.2012 10:50
quelle
1

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.

    
twoleggedhorse 25.09.2012 09:02
quelle
1

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

    
EternalMyrtle 10.03.2015 18:17
quelle
0

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.

    
Luftwaffe 25.09.2012 09:07
quelle