none
Sporadisch Fehler 3048 'Mehr Datenbanken können nicht geöffnet werden ...'

    Frage

  • Bei einem zwischenzeitlich sehr umfangreichen Access 2007-Projekt bekomme ich beim Öffnen eines Formulars mit dem das Verschicken von Termindaten eingeleitet wird oft (aber nicht immer) die Meldung "Mehr Datenbanken können nicht geöffnet werden".

    Meine Recherchen zum Thema führten immer wieder dazu, daß anscheinend zuviele Reocrdsets geöffnet werden, dann aber nicht mehr geschlossen werden.

    Jetzt habe ich den ganzen Code durchforstet, tatsächlich mehrfahc diese Situation gefunden und behoben (!?) - leider keine Besserung.

    Der typische Workflow ist so, daß von einem Auswahlformular (Form1) aus ein Auftrag gewählt wird und dieser dann im Bearbeitungsformular (Form2) geöffnet wird.

    Aus Form2 schliesslich nach Datenspeicherung wird ein weiteres Form3 geöffnet, in dem vor allem ausgewählt wird wie die Auftragsdaten verschickt werden.

    Besonderheit ist , daß dieses Form3 als Datensatzquelle eine aufwändige SELECT-Anweisung hat.

    Im Load-Event des Form3 wird dann ein recordset geöffnet, dass wiederum die Datensatzquelle des Form2 beinhaltet.

    Das soll dazu diesen unter betsimmten Umständen die Felder mit Defaults zu überschreiben oder die Felder vorzubelegen.

    Das klingt kompliziert und ist es sicher auch, aber fällt jemandem eine gute Methode, wie ich diesen Fehler 3048 verhindern kann? Zumal das nicht immer auftritt und ich noch nicht mal den Fehler provozieren kann.

    Ergänzung:

    Im Grunde geht es darum, auftragsbezogen bestimmte Daten zum Versand vorzubereiten.

    Dazu sollen nach einem Schema Daten vorbelegt werden, dann aber auftragsbezogen gespeichert werden, sodaß pro Auftrag auch individuelle Einstellungen gewählt werden können.


    • Bearbeitet NicoNi Freitag, 15. November 2013 15:51
    Freitag, 15. November 2013 15:49

Alle Antworten

  • Hallo NicoNi,

    kannst du nicht die Daten aus Form2 nicht beim öffnen an Form3 übergeben wenn es eh die gleichen Daten beinhaltet?

    den recordset schließt du am ende doch oder?  RS.Close setzt du auch ein Set RS = Nothing

    Michael

    Freitag, 15. November 2013 16:27
  • Noch eine Zwischenfrage sind das unterschiedliche Datenbanken in den du Daten abfragst oder immer ein und die selbe Datenbank?
    Freitag, 15. November 2013 16:33
  • @ rs.Close /rs=nothing: Wie schon beschrieben, ich habe den Quelltext durchgesehen und mehrere dieser Probleme geändert durch explizites rs.Close und nothing, ohne jedoch wirkliche Besserung zu erhalten.

    Ich kann nicht völlig ausschliessen, daß irgendwo doch noch etwas geöffnet bleibt.

    Kann ich das irgendwie näher einkreisen? Zumal ja der Fehler nicht immer auftritt.

    Es scheint speziell dann aufzutreten,wenn die Daten frisch eingegeben wurden und der Auftrag nicht geschlossen wurde.

    Die Daten speichere ich zwar vorher - aber wer weiss ...

    Freitag, 15. November 2013 16:39
  • Das ganz liegt wohl auch an den Datenbanken und nicht dem Recordset

    evtl. kommst du so weiter

    ich beziehe mich immer auf meine CurrentDb

    Public Property Get CurrentDBC() As DAO.Database
        If mDB Is Nothing Then
            Set mDB = CurrentDb
        End If
        Set CurrentDBC = mDB
    End Property

    zugriff erfolgt dann

    Dim RS As Recordset
    Set RS= CurrentDBC.OpenRecordset("tblMeineTabelle", dbOpenDynaset, dbSeeChanges)

    dbSeeChanges nur weil die Tabellen auch via ODBC vom mssql Server kommen können

    und durch die Public Property Get CurrentDBC() mache ich nicht immer weitere Verbindungen auf



    • Bearbeitet MCDPone Samstag, 16. November 2013 08:53
    Samstag, 16. November 2013 08:51
  • Hallo NicoNi
     
    "NicoNi" schrieb im Newsbeitrag
    news:22cebb3c-0c9a-4a0d-8cd6-97536c39177b@communitybridge.codeplex.com...
    > Meine Recherchen zum Thema führten immer wieder dazu, daß anscheinend
    > zuviele Reocrdsets geöffnet werden, dann aber nicht mehr geschlossen
    > werden.
    > Jetzt habe ich den ganzen Code durchforstet, tatsächlich mehrfahc diese
    > Situation gefunden und behoben (!?) - leider keine Besserung.
     
    Verwendest Du evt. viele Domain Aggregat Funktionen, wie DLookup() und der
    gleichen? Falls ja, benutze statt dessen Zugriffe über die Datenbank via
    eine Database instanz und einem Recordset oder, falls in Abfragen benutzt,
    ersetze diese duch eingeklammerte Select Statements wie folgendes:
     
    SELECT ..., (SELECT MAX(Wert) FROM DeineTabelle2 WHERE ID =
    DeineTabelle1.ID) AS MaxWert, ...
    FROM DeineTabelle1
     
    Dies ist wesentlich effizienter als ein DMax() und benötigt keine weiteren
    DB Instanzen. (im beispiel wäre natürlich ein Join und ein Max() das
    richtige, es geht nur um die Syntax)
     
    Gruss
    Henry
     
     
    Mittwoch, 20. November 2013 09:20