Wątek do wykonania połączenia z bazą danych

0
 
type TDataBaseThread = class(TThread)
  private
    // Komponent do komunikacji z bazą danych
    SQL  : ^TUniQuery;

  protected
    // Procedura odpowiedzialna za wykonanie wątku
    procedure Execute; override;

  public
    // Konstuktor - przekazanie parametrów
    constructor Create(var SQLQuery : TUniQuery);
  end;

implementation

//------------------------------------------------------------------------------
constructor TDataBaseThread.Create(var SQLQuery: TUniQuery );
begin
  // Pobranie adresu komponentu znajdującego się na DataModule
  self.SQL := @SQLQuery;

  // Wywołanie konstruktora klasy nadrzędnej
  inherited Create( false );
end;
//------------------------------------------------------------------------------
procedure TDataBaseThread.Execute;
begin
  // Zakończ wątek po wykonaniu procedury
  FreeOnTerminate := false;

  // Wykonaj połączenie z bazą danych
  self.SQL.Connection.Connect;
end;
//------------------------------------------------------------------------------

Jeżeli linia self.SQL.Connection.Connect; znajduje się w execute to kompilator nie wchodzi do procdury execute.
Jeżeli ją wyrzucę to kompilator wchodzi do procedury executy. Klasa ma służyć do inicjacji połączenia z bazą danych oraz wykonywania zapytań obarczonych długim czasem. Baza jest na serwerze zdalnym.

Proszę o pomoc.

0

Jeżeli wywołam Synchronize( self.SQL.Connection.Connect ) to procedura jest wykonywana, ale jej wykonanie nie jest wykonywane jako wątek. ( zwiesza mi gui )

1 użytkowników online, w tym zalogowanych: 0, gości: 1