ich bekomme beim häufigen Wechsel der Seiten eines Tab-Kontrols die o.g.
Fehlermeldung.
Das Tab-Kontrol besitzt 20 Seiten die jeweils ein Unterformularobjekt
integriert haben.
Das Datenbankobjekt wird nur zum Start und innerhalb eines Moduls mit "Set
db = currentdb()" geöffnet!
Das Tab-Kontrol selber beinhaltet keine EreignisMethode beim Wechseln der
Seiten!
Was kann falsch sein? Wer kann helfen?
Werden die Recordsets der Unterformulare zusätzlich mit OpenDB initialisiert
(20 Seiten = 20 openDB + Recordsets)?
Wie viel Datenbanken kann man öffnen ?
Danke für Eure Antworten +
mit freundlichen Grüßen / Best regards
Oliver Miers
----------------------------------------
BLAUPUNKT GmbH
Entwicklung Navigationstechnik
Navigationssoftware E-Plattform
http://www.blaupunkt.de
"Oliver Miers" <oliver...@de.bosch.com> wrote:
>ich bekomme beim häufigen Wechsel der Seiten eines Tab-Kontrols die o.g.
>Fehlermeldung.
>
>Das Tab-Kontrol besitzt 20 Seiten die jeweils ein Unterformularobjekt
>integriert haben.
>Das Datenbankobjekt wird nur zum Start und innerhalb eines Moduls mit "Set
>db = currentdb()" geöffnet!
>Das Tab-Kontrol selber beinhaltet keine EreignisMethode beim Wechseln der
>Seiten!
>
>Was kann falsch sein? Wer kann helfen?
>Werden die Recordsets der Unterformulare zusätzlich mit OpenDB initialisiert
>(20 Seiten = 20 openDB + Recordsets)?
>
>Wie viel Datenbanken kann man öffnen ?
Ich glaube es sind 255 gleichzeitig. Wenn Du diese aber wieder schliesst, sollte
das kein Problem sein.
Ich vermute eher, dass Du, wenn Du eine DB geöffnet hast (oder auch ein
Recordset), dieses dann nicht mehr sauber schliesst. (Siehe auch mal in die FAQ
zum Thema: Access lässt sich nicht beenden).
Häufige Ursache für dieses Fehlverhalten, zumindest habe ich den Verdacht, sind
viele Domain Aggregat Funktionen. Die DLookup() etc. öffnen schienbar jeweils
eine eigene DB Instanz und geben diese teilweise nicht mehr frei. Dafür gibt es
nur eine Abhilfe, eigene (und schnellere) Domain Aggregat Funktionen zu verwenden.
Beispiel Code findest Du unter http://www.mvps.org/access
Dieser Code dort hat aber IMHO noch ein kleines Manko: Die DB und RS Instanzen
werden nicht explizit vernichtet. Also unbedingt noch die zeilen:
RS.Close
DB.Close
Set RS=Nothing
Set DB=Nothing
hinzufügen.
Weitere Möglichkeiten, DB Instanzen zu verbraten, sind Dropdown Felder und
Listboxen. Hinter diesen steckt (falls die RowSourceType auf "Table/Query" steht)
ebenfalls ein SQL Statement, das eine DB Instanz verwendet.
Eine häufige Performance Massnahme ist nicht zu unrecht, diese erst dann an die
Tabelle zu binden, wenn sie wirklich benötigt wird (Beim Hingehen Ereignis die
Rowsource auf das SQL Statement setzen und den RowSourceType auf "Table Query"
ändern) und vorher nur einfach den beim Laden des Forms temporär eingelesene Wert
auszugeben, indem der RowSourceType auf "Value List" gesetzt wird und der Wert in
die RowSource gelegt wird. Dadurch kannst Du auch verhindern, dass unnötige DB
Instanzen verbraten werden (es sei denn, Du liest die Werte mit den Standard
Domain Aggregat Funktionen ein).
Des weiteren macht es wohl kaum Sinn, beim Anzeigen des Formulars bereits alle
20 UFOs in allen Registern zu laden und mit Daten zu versorgen (auch dabei werden
jeweils DB Instanzen benötigt). Auch hier kann man mit Late Binding der SubForm
Controls einiges erreichen.
Mach ein einfaches Form, das nicht an eine Tabelle gebunden ist. Gib dort nur den
Text aus "Daten werden geladen ...", sonst keine weiteren Steuerelemente im
Formular.
Dieses Formular hängst Du nun bei allen SubForms rein, die beim initialen Öffnen
des HFOs nicht angezeigt werden.
Beim REgisterwechsel (Ereignisprozedur) schaust Du nun, welche Forms denn nun
angezeigt werden sollen und setzt die ControlSource auf eben das geünschte
SubForm. Der Benutzer sieht dann zuerst das Subform mit dem Text "Daten werden
geladen.." und nach einigen Augenblicken sind die Daten dann ja auch da.
Die letzte Massnahme ist, alle nicht mehr benötigten Formulare zu schliessen
oder dem Benutzer gar nicht die Möglichkeit zu geben, mehr als eine bestimmte
Anzahl Formulare geöffnet zu halten (Forms.Count beim öffnen kontrollieren und
allenfalls das Öffnen mit einer Fehlermeldung abbrechen, wenn das Limit erreicht
ist).
Mit diesen Massnahmen haben wir das Problem schon bei einigen grösseren
Anwendungen in den Griff bekommen. Meist war da vorrangig das Performance Problem
beim Laden der komplexen Forms zu lösen (Verbesserung vom Minuten Bereich in den
1-3 Sekunden Bereich haben wir damit jeweils problemlos erreicht), aber oft war
dieses mit der von Dir beschriebenen Fehlermeldung verbunden.
Ich hoffe, diese nun doch ein bisschen ausführlich gewordenen Lösungsanssätze
helfen Dir weiter.
Henry
--
__________________________________________________________
News suchen, lesen, schreiben mit http://newsgroups.web.de
> ich bekomme beim häufigen Wechsel der Seiten eines Tab-Kontrols die o.g.
> Fehlermeldung.
Die Fehlermedlung ist irritierend. Eigentlich sollte es treffender
"Mehr Tabellen/Abfragen können nicht geöffnet werden".
Ich hatte das Problem auch einmal in Verbindung mit Unterformularen
und habe dabei festgestellt, dass er mir das Formular zig mal versteckt
aufgemacht hat (bemerkte ich, als ich unter "Fenster" "einblenden"
wählte).
Bei mir konnte ich das Problem durch eine "kleine" Umstrukturierung/
Umprogrammierung lösen.
/Ray
"Raymond Geering" <gee...@fambau.ch> wrote:
>Die Fehlermedlung ist irritierend. Eigentlich sollte es treffender
>"Mehr Tabellen/Abfragen können nicht geöffnet werden".
nein, da irrst Du dich, gemeint sind schon die DB Instanzen, die gleichzeitig
geöffnet sind.
>
>Ich hatte das Problem auch einmal in Verbindung mit Unterformularen
>und habe dabei festgestellt, dass er mir das Formular zig mal versteckt
>aufgemacht hat (bemerkte ich, als ich unter "Fenster" "einblenden"
>wählte).
dafür werden nicht nur Tabellen/Abfragen geöffnet, sondern auch DB Instanzen,
daher kommt der Fehler.
Gruss Henry
> nein, da irrst Du dich, gemeint sind schon die DB Instanzen, die
gleichzeitig
> geöffnet sind.
> dafür werden nicht nur Tabellen/Abfragen geöffnet, sondern auch DB
Instanzen,
> daher kommt der Fehler.
Danke, ich lerne gerne dazu. Aber dann sollte doch wenigstens stehen
"mehr Datenbanken Instanzen können nicht geöffnet werden".
So wie die Fehlermeldung steht, ist sie IMO verwirrend, denn unter
Datenbank verstehe ich (wohl fälschlicherweise) die Anzahl geöffnete
mdb / mde Dateien.
Gruss
/Ray
"Raymond Geering" <gee...@fambau.ch> wrote in message
news:Of6ts$fXBHA.432@tkmsftngp07...
> Danke, ich lerne gerne dazu. Aber dann sollte doch wenigstens stehen
> "mehr Datenbanken Instanzen können nicht geöffnet werden".
>
> So wie die Fehlermeldung steht, ist sie IMO verwirrend, denn unter
> Datenbank verstehe ich (wohl fälschlicherweise) die Anzahl geöffnete
> mdb / mde Dateien.
Das kommt wahrscheinlich vom Englischen, dort heisst es Databases und
meint den Object Type Database, was dann eben übersetzt Datenbanken
heisst. Aber eigentlich hast Du recht, genau genommen müsste es heissen:
Es können nicht mehr Objektinstanzen vom Typ Database geöffnet werden.
Nur wer würde das noch verstehen?
Gruss
Henry