AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Verbindungsverlust zur Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Verbindungsverlust zur Datenbank

Ein Thema von haentschman · begonnen am 26. Apr 2008 · letzter Beitrag vom 26. Apr 2008
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 07:28
Datenbank: firebird • Version: 2.0 • Zugriff über: zeos
guten Morgen...

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 )

Freue mich auf Eure Hinweise...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 08:06
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:
...
  CheckConnection;
  MyDBCommand.Execute;
...
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.

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;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

Re: Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 13:58
Danke für den Tip.

Zitat:
das ich vor jeder Datenbankaktion eine Verbindungsprüfung einbaue
... ich dachte mir schon, daß es darauf hinausläuft. An die Arbeit darf ich gar nicht denken.

...was kostets mehr, wenn man es gleich richtig macht

bis bald...
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#4

Re: Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 16:05
Ich würde in so einem Falle immer versuchen, das direkt in die Komponenten 'hineinzumogeln', in sowas wie DoBeforeOpen bspw.
Confuzius say: Early worm have death wish.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 17:46
Naja,
Zitat von haentschman:
... ich dachte mir schon, daß es darauf hinausläuft. An die Arbeit darf ich gar nicht denken.
Dann hast Du etwas falsch gemacht. Normalerweise zentralisiert man Zugriffe auf ein externes System in einem Datenmodul o.ä. Dann halten sich die vorzunehmenden Änderungen nämlich in Grenzen. Ich habe z.B. alle Zugriffe auf das RDBMS in einer einzigen Methode 'Execute', und da ist o.g. Erweiterung ein Klacks.

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:
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;
'CreateDataset' prüft die Verbindung (und setzt ggf. neu auf) und liefert ein Dataset mit den Daten.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

Re: Verbindungsverlust zur Datenbank

  Alt 26. Apr 2008, 18:13
Zitat:
Dann hast Du etwas falsch gemacht.
... ja sicher

Zitat:
Ganz grausam ist, für jede Anweisung eine eingene DB-Komponente zu verwenden
... ganz so schlimm bin ich dann doch nicht

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 )...dann Optimierung.


Danke für Eure Infos...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 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