Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TADOCOnnection wiederverbinden (https://www.delphipraxis.net/67866-tadoconnection-wiederverbinden.html)

Moony 21. Apr 2006 07:00

Datenbank: MySQL • Zugriff über: TADO

TADOCOnnection wiederverbinden
 
Hallo zusammen,

habe das folgende kleine/große Problem:
Die Verbindung zum MySQL-Server wird über die ODBC-Schnittstelle zum MySQL ODBC Driver hergestellt.
Es kann durchaus vorkommen, dass sich der MySQL-Server verabschiedet hat und somit kein Zugriff auf die Datenbank möglich ist. Diesen Fehler fange ich so ab:

Delphi-Quellcode:
...
try
  SQL_Funktion();
except
  Err := AdoConnection.Errors.Item[AdoConnection.Errors.Count - 1].Description;
  if Pos('MySQL server', Err) > 0 then
  begin
    AdoConnection.Close;
    try
      AdoConnection.Open;
    except
      Showmessage('Server connection failed!' + #13 + 'Application will be closed!');
      Application.Terminate;
    end;
  end;
end;
Falls ein Fehler in der SQL-Funktion auftritt, hole ich mir in der except-Routine den letzten Fehler aus der Datenbank. Falls in dieser Meldung "MySQL server" auftritt, dann versuche ich die Verbindung zu schließen und erneut aufzumachen.
Hier passiert schon der erste Fehler. Da das Netzwerkkabel ausgestöpselt ist, kann die Datenbank nicht erfolgreich verbunden werden, aber er sagt trotzdem dass die Verbindung steht (AdoConnection.Connected = true).
Der zweite Fehler der dann folgt ist, dass ich eben ein Dataset habe, welches immer wieder im Timer einen SQL Befehl ausführt. Und da die Datenbankverbindung nicht steht, kann somit das Dataset auch keine Anweisung ausführen. Was dann zwnagsläufig zu einer Endlosschleife führt.

Ich hoffe mir kann da jemand wieterhelfen.

Gruß, Moony
Scheinbar verbindet die ODBC-Schnittstelle nicht wirklich wieder die Datenbank, sondern holt die Verbindung aus dem Cache.

Bernhard Geyer 21. Apr 2006 08:20

Re: TADOCOnnection wiederverbinden
 
Ich würde für MySQL eh nicht über ADO und ODBC gehen sondern direkt z.B. mit MyDAC. Dort bekommst Du auch bessere Fehlermeldungen da nicht noch zwei allgemeine Zwischenschichten vorhanden sind.

Moony 21. Apr 2006 09:07

Re: TADOCOnnection wiederverbinden
 
Die Frage hier ist, ob ich dadurch die Verbindung wieder aufgebaut bekomme und nicht wie hier scheinbar aus dem Cache kriege?

chericks 27. Aug 2010 08:40

AW: TADOCOnnection wiederverbinden
 
Habe auch dieses Problem, kennt hier schon jemand eine Lösung?

Bernhard Geyer 27. Aug 2010 08:53

AW: TADOCOnnection wiederverbinden
 
Eine Lösung ist nicht ADO zu verwenden.

Ansonsten unterstützt ADO einen Connection Pool. Schau mal ob du diesen u.U. leeren kannst.

chericks 27. Aug 2010 10:52

AW: TADOCOnnection wiederverbinden
 
Danke für den Anstoß!
Ich denke mit dem Eintrag "OLE DB Services=-4;" im Connectionstring der TadoConnection sollte ich das Problem bei mir nun behoben haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz