![]() |
Datenbank: firebird • Version: 2.0 • Zugriff über: zeos
Verbindungsverlust zur Datenbank
guten Morgen... :hi:
ich habe mal eine Prinzipfrage: Ich arbeite mit Zeos. Wenn einer den Netzwerkstecker ziehen würde wäre die Connection trotzdem immer noch Connected = True und es wird kein Ereignis ausgelöst. :?: Wie geht man am schlauesten an diese Problematik ran - zyklisch mit einem Timer eine Query absetzen und gucken ob was kommt ( Intervall ? ) --> event. dann Connect - vor jeder Query Connection Prüfen ? --> event. Connect ( was ne Arbeit :shock: ) Freue mich auf Eure Hinweise... |
Re: Verbindungsverlust zur Datenbank
Ich verwende zwar kein Zeos, aber prinzipiell mache ich es so, das ich vor jeder Datenbankaktion eine Verbindungsprüfung einbaue, also so etwa:
Delphi-Quellcode:
Und die Methode 'CheckConnection' schickt ein 'select 1' zum Server. Wenn das knallt und die Exception mir sagt, das die Verbindung unterbrochen wurde (und nur dann!), baue ich sie wieder auf (1 Versuch). Wenn das nicht klappt, ist eh Hopfen und Malz verloren und ich melde eine Exception, das die DB nicht erreichbar ist.
...
CheckConnection; MyDBCommand.Execute; ...
SQL-Code:
Procedure TMyDataModule.CheckConnection;
Procedure _TryConnection; Begin MyConnection.Connected := True; MyConnection.executeI('select 1'); End; Begin Try _TryConnection; Except On E:EConnectionLostConnection Do _TryConnection; On E:Exception Do Raise E; End End; |
Re: Verbindungsverlust zur Datenbank
Danke für den Tip.
Zitat:
...was kostets mehr, wenn man es gleich richtig macht :wink: bis bald... |
Re: Verbindungsverlust zur Datenbank
Ich würde in so einem Falle immer versuchen, das direkt in die Komponenten 'hineinzumogeln', in sowas wie DoBeforeOpen bspw.
|
Re: Verbindungsverlust zur Datenbank
Naja,
Zitat:
Ganz grausam ist, für jede Anweisung eine eingene DB-Komponente zu verwenden und diese kreuz und quer in der Anwendung zu verteilen. Ich kann z.B. ein TDataset mit einer SELECT-Anweisung auch so füllen:
Delphi-Quellcode:
'CreateDataset' prüft die Verbindung (und setzt ggf. neu auf) und liefert ein Dataset mit den Daten.
Procedure TMyForm.OnCreate;
Begin FMyDataset := MyDatamodule.CreateDataSet ('Select * from Tabelle'); // privates Feld des Formulares. FDataSource.Dataset := FMyDataset; MyDataGrid.Datasource := FDataSource; End; Procedure TMyForm.OnDestroy; Begin FreeAndNil (FMyDataset); End; |
Re: Verbindungsverlust zur Datenbank
Zitat:
Zitat:
Ich habe versucht, die offenen Querys auf das notwendige zu beschränken (z.B. Visualisierungen im DBGrid), es bleiben aber eine Menge übrig. Über Zentralisierung der Querys (besonders beim Schreiben) hatte ich nachgedacht, aber keine vernünftige Lösung gefunden, wie ich die Prozedur lexibel aufbaue. (Parameter zwischen 0 und ca. 20). Erst mal funktionsfähig ( die Uhr tickt :wink: )...dann Optimierung. Danke für Eure Infos... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz