![]() |
SpeedButton verschwindet bei Datenbank-Connect
Hi,
ich habe auf meiner Form einen SpeedButton gelegt. Bei OnClick soll eine Connection zu einem Datenbankserver übers Internet aufgebaut werden. Obwohl ich das Verbinden zur Datenbank in einem Thread laufen lasse, verschwindet der SpeedButton bis der Thread beendet ist. Wie kommt denn das? Gruß Gambit PS: Das Verschwinden des SpeedButtons ist analog des Verhaltens eines normalen Buttons der erst zurückspringt, wenn der Thread beendet ist bzw die Datenbankverbindung aufgebaut ist... |
Re: SpeedButton verschwindet bei Datenbank-Connect
Bist du sicher, dass der Codein einem eigenen Thread ausgeführt wird, und nicht im Mainthread?
Zeig' mal den Code vom Buttonclick ... :zwinker: :witch: |
Re: SpeedButton verschwindet bei Datenbank-Connect
ich habe mal die entscheidende Routine aus der OnClick-Methode rauskopiert:
Delphi-Quellcode:
dann der Thread:
MDBCon:= TConnectThread.Create(false, DB_DataModul.ZConDBMaster, ini.MDBName,
INetHostAdress, ini.IniUserName, ini.IniUserPass, ConPort); MDBCon.WaitFor;
Delphi-Quellcode:
anfangs hatte ich es ohne Synchronisation probiert, da keine VCL-Komponenten in der Execute-Methode angesprochen werden. Die Synchronisation hat aber auch nix gebracht...die synchronisierte Connect-Methode enthält also den gleichen Code wie der ausgeklammerte Teil der Execute-Methode. Thread-Priority ändern hat auch nix gebracht...
constructor TConnectThread.create(CreateSuspended: boolean; Connection: TZConnection;
DBName, Host, User, Pass: String; ConPort: Integer; const Protocol: String = 'mysql-4.0'); begin inherited create(CreateSuspended); //Priority:= tpIdle; freeOnTerminate:= false; fErrCode:= -1; fCon:= Connection; fCon.Database:=DBName; fCon.HostName:= Host; fCon.User:= User; fCon.Password:= Pass; fCon.Port:= ConPort; fCon.Protocol:= Protocol; end; procedure TConnectThread.Execute; begin {Try fCon.Connected:= true; fErrCode:= 0; except fErrCode:= 1; end; } Synchronize(Connect); end; |
Re: SpeedButton verschwindet bei Datenbank-Connect
Es liegt wohl am WaitFor. Aber ohne WaitFor geht es ja nicht, ich muss ja erstmal wissen, ob eine Verbindung aufgebaut werden konnte ehe ich eine Abfrage an die Datenbank schicke...
Edit: Es funzt, wenn ich zwischen dem Konstruktor des Threads und dem WaitFor ein
Delphi-Quellcode:
einbaue. Ob das aber so alles der wahre jakob ist, weiß ich nicht...
SpdBtnUpdateMDB.Update;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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 by Thomas Breitkreuz