Announcement

Collapse
No announcement yet.

ADO-Connection - Mehrfachnutzung = Fehler

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO-Connection - Mehrfachnutzung = Fehler

    Hallo,

    in meiner Anwendung, hier jetzt prog1 genannt, nutze ich ein ADO-Connection-Objekt mehrfach, für verschiedene Query-Objekte. Bei kleinen Datenmengen sind nie Fehler aufgetreten, aber jetzt häufen sich immer mehr die Meldungen.

    Zum Beispiel:
    Code:
    "Die Verbindung ist mit Ergebnissen eines anderen Befehls beschäftigt."
    Ich habe ein separates Projekt erstellt in dem ich eine Abfrage auf eine Tabelle mit über 10000 Einträgen starte. Über einen Timer wird eine zweite Abfrage gestartet auf eine Tabelle mit über 9000 Einträgen. Beide Abfragen werden jeweils mit einem separaten Query-Objekt über eine gemeinsame ADO-Connection ausgeführt. Aber es kommt zu keinem Fehler. Warum?

    Unter anderem tritt auch die sporadische Meldung auf
    Code:
    "Der Index der Liste überschreitet das Maximum (35)."
    , wenn ich eine Abfrage ausführe mit einem Query-Objekt das die genannte, mehrfachverwendete ADO-Connection verwendet.


    Ist das verwenden einer zentralen ADO-Connection ein schlechtes Design
    oder wo könnte das Problem liegen?

  • #2
    Ist das verwenden einer zentralen ADO-Connection ein schlechtes Design
    oder wo könnte das Problem liegen?
    Das übliche Muster für Connections sollte eigentlich immer sein 'so spät wie möglich öffen und so früh wie möglich schließen'. Es macht üblicherweise keinen Sinn Connections zu verwahren oder wieder zu verwenden. Bei einer Multithreaded-Anwendung sollte erst recht jeder Thread seine eigene Connection verwenden.

    Welche DB verwendest du für welchen Zweck?

    "Der Index der Liste überschreitet das Maximum (35)."
    Das hört sich dagegen eher nach einem Bug an als nach schlechtem Design.

    Comment


    • #3
      Danke Ralf Jansen für deine Antwort.

      Ich nutze MSSQL. Mit meiner Anwendung werden Kunden- und Vertragsdaten verwaltet. Es gibt dort viele Formulare die Non-Modal sind und in der Regel immer mindestens ein Query-Objekt besitzen. Wie gesagt verwenden die Query-Objekte das gleiche ADO-Connection-Objekt.

      Bei einer Multithreaded-Anwendung sollte erst recht jeder Thread seine eigene Connection verwenden.
      Das ist in meiner Anwendung der Fall

      Irgendwie bin ich jetzt verwirrt wann man neue ADO-Connection-Objekte verwenden sollte, außer bei den Threads das ist klar.

      Comment


      • #4
        Irgendwie bin ich jetzt verwirrt wann man neue ADO-Connection-Objekte verwenden sollte
        Meiner Meinung nach immer Aber ich habe auch nicht darauf geachtet das ich hier im Delphi Ordner bin. Meine Delphi Kenntnisse sind doch arg eingerostet und wir sollten lieber auf jemanden warten der Delphi noch aktiv benutzt und eine vertrauenswürdigere Meinung hat

        Comment


        • #5
          Originally posted by weisse_maske View Post
          Das ist in meiner Anwendung der Fall
          Non-Modale Dialoge heißt noch nicht Multithreaded.

          Ich tipp darauf das das Asynchrone Datenabholen hier dir einen Strich durch die Rechnung macht.

          Welches DBMS verwendest du?

          Comment


          • #6
            Meine Anwendung arbeitet mit Threads und non-modalen Dialogen. Die Threads haben jeweils eine eigene Verbindung. Nur im Hauptthread scheint es mit der mehrfachverwendeten Connection zu krachen.

            Comment


            • #7
              Hallo ich bin es wieder,

              also eine TADOConnection kann mehrfach genutzt werden mit den Querys, ohne Probleme. Auch wenn in der Der Delphi-Hilfe drin steht das man die ADOConnection mehrfach nutzen kann traue ich ihr nicht immer übern Weg.

              Meine Vermutung geht jetzt in folgende Richtung. In meinem Programm wird an einigen stellen die Methode Execute der Hauptverbindung aufgerufen.

              Weiß vielleicht jemand wann oder wie hier Probleme auftreten können?

              Ich versuche immer noch die Ursache für die Fehlermeldung zu finden.
              Code:
              "Die Verbindung ist mit Ergebnissen eines anderen Befehls beschäftigt."

              Comment


              • #8
                Vielleicht hilft Dir das:

                http://www.ms-office-forum.net/forum...d.php?t=241996
                docendo discimus

                Comment


                • #9
                  Schau Dir nochmals bitte Deine Querys an. Eventuell liege ich falsch und bringe Dich und mich jetzt etwas durcheinander. Da ich ähnliche Probleme hatte. Bei einigen Abfragetypen kann intern das Ergebniss schnell die Vorgabe aushebeln bzw sprengen. Muß ja nur jeder Datensatz rekursiv mehrmals durchsucht und dabei immer den Kriterien entsprechen. So kann das Ergebnis einer Abfrage unter Umständen ein Vielfaches der überhaupt vorhandenen Datenmenge sein. Vor allem bei Integration von Funktionen und Gruppierungen innerhalb einer MySQL_Abfrage. Nur der letzte Filtervorgang räumt dann bei genügend Speicher unsichtbar auf. ADO selber hat zB. in Access eine max. Datensatz Ergebnissvorgabe von 1000 Datensätzen. Diese kann meinesachtens unter MSAccess-Optionen verändert werden.
                  Weitere mögliche Ursache für die laufenden Fehlermeldungen könnten durch die Anwendung ausgelöste langsame Net-Prozesse (Winowsinterne durchsuche des Netwerkes)sein. Eventuell auch Verweise, lokale und globale Variablen und die Namenskonvention an sich.
                  Also Kanal öffnen , ausführen, schließen und eventuell erst mal checken ob wirklich geschlossen.
                  Gruß und viel Glück

                  Comment


                  • #10
                    This is a test post. shouldnt be visible???

                    Comment

                    Working...
                    X