Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi SpeedButton verschwindet bei Datenbank-Connect (https://www.delphipraxis.net/46944-speedbutton-verschwindet-bei-datenbank-connect.html)

Gambit 3. Jun 2005 13:11


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...

jfheins 3. Jun 2005 13:52

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:

Gambit 3. Jun 2005 14:04

Re: SpeedButton verschwindet bei Datenbank-Connect
 
ich habe mal die entscheidende Routine aus der OnClick-Methode rauskopiert:

Delphi-Quellcode:
MDBCon:= TConnectThread.Create(false, DB_DataModul.ZConDBMaster, ini.MDBName,
                                     INetHostAdress, ini.IniUserName, ini.IniUserPass,
                                     ConPort);
MDBCon.WaitFor;
dann der Thread:

Delphi-Quellcode:
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;
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...

Gambit 3. Jun 2005 14:24

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:
SpdBtnUpdateMDB.Update;
einbaue. Ob das aber so alles der wahre jakob ist, weiß ich nicht...


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