Announcement

Collapse
No announcement yet.

Datenbankverbindung öffnen / schliessen

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

  • Datenbankverbindung öffnen / schliessen

    Hallo,

    ich schlage mich jetzt schon seit geraumer Zeit mit einem Problem herum:

    Ich bin echt nicht besonders gut mit Delphi. Hab mir mein Wissen vor ca 10 Jahren selber angeeignet und muss es für ein Projekt alle paar Jahre reaktivieren.

    Basis ist Delphi4....und soll auch so bleiben.

    Ich muss ein Programm erweitern. In diesem Programm wird auf eine DB2 Datenbank auf dem gleichen Rechner zugegriffen. Das ganze hat damals jemand programmiert der wie ich Anfänger war. Ob der Zugriff auf die Datenbank umständlich oder in der Form notwendig ist weiss ich nicht. Funktioniert aber tadellos.

    Heute muss ich eine Erweiterung machen und Daten von einem Server aus mysql holen und in die DB2 schreiben.

    Die Verbindung habe ich über ODBC erstellt

    In der Delphi-Anwendung habe ich die Anbindung parallel gestrickt.....Anbindung an mysql beim Start der Anwendung......schliessen beim Beenden der Anwendung.
    Das Ganze mit einem Datenbank-Alias und einer Session.
    Klappt alles prima! Ich kriege alle Daten....kann sie in die DB2 schreiben.

    Jetzt kommt DAS PROBLEM:
    ich brauche den Zugriff auf die mysql-Datenbank nur sporadisch. Will also die Verbindung nicht aufrecht erhalten, sondern nach dem Holen eines Auftrages wieder schliessen....die Verbindung wird mir zudem von mysql per timeout nach 8 Stunden geschlossen und dann hilft nur ein Beenden der Anwendung und Neustart.

    Wie kann ich die Verbindung wieder schliessen?
    Ich habe eine grosse Prozedur in der mehrere Querys eine Session nutzen. Dafür habe ich diverse Query und Datasource-Objekte auf meiner Form platziert.
    Wie schliesse ich diese/eine Session?

    Ich bekomme die Meldung "Doppelter Name für eine Sitzung". Langsam verliere ich den Überblick.....irgendwann bei meinen ganzen Änderungsversuchen hatte ich Mecker wegen "Doppeltem Datenbanknamen".

    Ich bin auf echt dünnem Eis...mir läuft die zeit davon und ich betreibe hier Fischen im Trüben.

    Gibt es eine einfache Methode (ohne Zusatz-Installationen) die Verbindung zu mysql zu öffnen (hier frage ich 2 Tabellen ab) und im Anschluss wieder zu schliessen?
    Brauche ich eine Session dazu (die habe ich bei den Querys benutzt!)?
    Wenn nein - wie setze ich dann die Querys ein?
    Wenn ja - wie kann ich die Session wieder nutzen(also Beenden nach dem ersten Nutzen)?

    Hoffentlich kann mir jemand einen Rat geben.

    Habe viele Tips in diversen Foren und Hilfetexten gelesen und keinen umsetzen können.

    Viele Grüße

  • #2
    Alle verbindungen sollten über ein Databaseobjekt laufen. Da du die seit über 10 Jahren abgekündigte BDE verwendest wäre das ein TDatabase-Objekt. Alle Queries sollten auf diese verweisen. Über TDatabase.Active := False schließt du alle queries.

    Comment


    • #3
      TDatabase benutze ich....aber wie gesagt....ich hab das ganze Nachgestrickt unter dem Motto "Sie weiss nicht was Sie tut"...aber es hat geklappt.

      Mir fehlt das Verständnis für das Zusammenspiel der Object. Brauche ich eine Session um auf die Datenbank zuzugreifen. Brauchen die Queries die?

      Wie kriege ich die Session wieder frei für den nächsten Zugriff?

      Viele Grüße

      Comment


      • #4
        Wenn keine Session vorhanden ist, wird automatisch vom Databaseobjekt eine instanz erzeugt.

        Comment


        • #5
          Ich interpretiere die Antwort mal dahin gehend dass eine Session von Nöten ist....! Entweder von mir erzeugt oder von Delphi.

          Das bringt mich dann direkt wieder zu meiner Frage:

          "Wie kriege ich die Session wieder frei für den nächsten Zugriff?"
          Offensichtlich besteht bei mir die Session weiterhin beim nächsten Zugriff da ich die Meldung "Doppelter Name für eine Sitzung" bekomme.

          Comment


          • #6
            Speicherfresser?

            Nach vielen Fehlversuchen habe ich jetzt alles in eine (Monster-)Prozedur gepackt....egal....funktioniert. Ich kann die Datenbankverbindung und die Session öffnen und wieder schliessen ohne Mecker wegen doppeltem Namen oder doppelter Nutzung.

            Aber ich bin mir nicht ganz sicher ob ich da irgendwo einen kleinen Speicherfresser habe. Kann man das in (ausser visuell im Taskmanager) überprüfen?

            Viele Grüße

            Comment

            Working...
            X