AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abgebrochene ADOConnection wiederherstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abgebrochene ADOConnection wiederherstellen

Offene Frage von "Iwo Asnet"
Ein Thema von Nico B. · begonnen am 4. Jul 2012 · letzter Beitrag vom 5. Jul 2012
Antwort Antwort
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

AW: Abgebrochene ADOConnection wiederherstellen

  Alt 4. Jul 2012, 15:20
So eine Verbindung bekommt vom gezogenen Kabel nichts mit.
Stell Dir vor, Du machst das im Firmennetz und die Datei liegt auf einem Server in Honolulu und der dortige Admin stolpert über das Netzwerkkabel (klar, und wird gefeuert, der Depp).

Auf deinem PC ist die Welt so lange in Ordnung, bis Du versuchst, mit der Verbindung aktiv zu arbeiten. Bis dahin sagt die dir 'Alles in Butter, als mich hat noch niemand getrennt'.

Du kannst natürlich vor jeder Aktion prüfen, ob eine Verbindung besteht. Aber dazu musst Du irgend etwas mit der Verbindung anstellen. Einige Treiber machen das, indem Sie ein 'SELECT 1' schicken. Dieser Befehl wird im Server (den Du nun mal nicht hast, aber egal) verarbeitet und dann wird eine Tabelle bestehend aus einer Zeile und einer Spalte als Ergebnis geschickt. Wenn das klappt, ist die Verbindung ok. Das 'SELECT 1' ist deshalb beliebt, weil es kaum Last erzeugt.

Bei ACCESS müsste man das probieren, welcher Befehl schnell geht und trotzdem die Verbindung aktiv auffordert, sich mit der MDB-Datei zu beschäftigen.

Allerdings würde ich es einfach drauf ankommen lassen und bei einem Fehler die Verbindung neu aufbauen.

Alternativ kannst Du dir Gedanken über das 'Briefcase' Modell machen, bei der bewusst mit der Tatsache gearbeitet wird, das der Client nicht ständig Zugriff auf die Zentrale hat (Briefcase = Aktenkoffer => Außendienstmitarbeiter).
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#2

AW: Abgebrochene ADOConnection wiederherstellen

  Alt 5. Jul 2012, 07:40
Hallo Leute,

ich habe jetzt eine Lösung für mein Problem gefunden.
Leider weiß ich zwar nicht wie man in meinem Fall einen Verbindungsausfall richtig erkennt, aber das Problem habe ich ein wenig umgangen. Das "SELECT 1" oder auch eine etwas tiefergehende Abfrage (bspw. nach dem ersten oder letzten Element einer bestimmten Tabelle) wie es mir von Iwo Asnet vorgeschlagen wurde, hat leider nicht funktioniert.

Hier mein Lösungsweg:
1. Ich gehe davon aus, dass die Verbindung zu meiner Datenbank immer besteht.
2. Über eine AppException fange ich alle Fehler meines Programms ab.
3. Entsteht der Fehler bei einer Datenbankabfrage versuche ich automatisch die Verbindung neu aufzubauen. Dazu trenne ich die Verbindung und starte anschließend einen TTimer.
4. Bei jedem Start des Timerevents versuche ich nun die Verbindung wieder aufzubauen.

Hier ein Teil des Quellcodes:
Delphi-Quellcode:
//im AppException-Event des Programms...
ADOC_CNC.Connected:=false;
Timer1.Enabled:=true;

//nun das Timer-Event...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //Verbindung neu aufbauen
  try
    ADOC_CNC.Connected:=true;
    if ADOC_CNC.Connected
      then
        Timer1.Enabled:=false;
  except
    //Verbindungsaufbau gescheitert -> neuer Versuch im nächsten Event
  end;
end;
Damit ist zwar nicht alles geklärt, aber ich kann damit zumindest erst mal weiter.
Danke euch allen!
Nico Bäger
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Abgebrochene ADOConnection wiederherstellen

  Alt 5. Jul 2012, 07:52
Delphi-Quellcode:
Function ConnectionIsValid (aConnection : TADOConnection);
Begin
  Try
    aConnection.Execute('SELECT 1');
    Result := True
  Except
    Result := False
  End
End;
Das sollte funktionieren.
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#4

AW: Abgebrochene ADOConnection wiederherstellen

  Alt 5. Jul 2012, 08:51
Hallo Furtbichler,

ich habe deinen Code gerade einmal ausprobiert.
Leider erhalte ich damit immer (selbst nach aConnection.Connected:=false) ein true als Result.
Selbst wenn ich die Verbindung nie aufgebaut habe.
Das ist echt ein Phänomen...
Nico Bäger
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#5

AW: Abgebrochene ADOConnection wiederherstellen

  Alt 5. Jul 2012, 10:36
Na klar: Die Verbindung wird ja auch implizit aufgebaut.
  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 11:53 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