Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AdoConnection in eigenen Thread (https://www.delphipraxis.net/121371-adoconnection-eigenen-thread.html)

Tim Henford 26. Sep 2008 09:26


AdoConnection in eigenen Thread
 
Hallo,

ich habe das Problem, dass wenn ich
Delphi-Quellcode:
ADOConnection.Connected:= true;
aufrufe und keine Verbindung zum SQL-Server bekomme, dass sich mein Programm komplett aufhängt.

Nun wollte ich das verhindern, indem ich das ganze in einen Thread packe - macht das Sinn?
Es soll nur verhindert werden, dass das Programm komplett abschmiert und nach 15sek Wartezeit eine Meldung ausgegeben wird und der User trotzdem weiter machen kann.

Delphi-Quellcode:
unit U_TimerThread;

interface

uses
  Classes, Windows;

type
  TimerThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

procedure TimerThread.Execute;
begin
  ADOCon.Connected:= true;
end;
beim Verbindungs-ButtonClick:
Delphi-Quellcode:
var
  timerT : TimerThread;
begin
  TimerT := TimerThread.create(true);
  TimerT.Resume;
end;
wie krieg ich jetzt mit, ob 15s rum sind und nix passiert ist, sodass ich den Thread wieder beenden kann?

Danke Tim

sirius 26. Sep 2008 09:34

Re: AdoConnection in eigenen Thread
 
15 Sekunden bekommst du am besten mit einem Timer mit ;)

Aber es macht keinen Sinn, nur den einen Befehl in den Thread zu legen. Du musst schon die ganze Komponente in den Thread auslagern.
Ist auch besser so, dann kannst du den Thread gleich komplett für alle Datenbankabfragen stehen lassen.

alzaimar 26. Sep 2008 09:37

Re: AdoConnection in eigenen Thread
 
Also ich pinge den Server vorher an. Dazu extrahiere ich die SQL-Server Adresse aus dem Connectionstring und bete, das der Server Pings auch wirklich beantwortet. Bei meinen Installationen ist das aber i.A. der Fall.

Du kannst aber auch mit der Eigenschaft 'ConnectionTimeout' herumspielen. Letztendlich kann es aber durchaus in Einzelfällen einige Sekunden dauern, bis eine Verbindung zustande kommt. Insofern frickelst du vielleicht an der falschen Stelle herum.

Ich würde einfach einen Dialog anzeigen 'DB-Verbindung zu xxx.xxx.xxx.xxx wird aufgebaut' oder irgendwie so.

Was kann der Anwender eigentlich so alles mit deiner Anwendung anstellen, wenn noch keine Verbindung zustande gekommen ist? Nicht viel, denke ich und insofern ist das Auslagern in einen Thread doch überflüssig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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