Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Zeos Connect in Thread packen

  Alt 28. Feb 2009, 21:46
N'Abend!

Ich möchte beim Programmstart eine Zeos-Verbindung zu einer MySQL-DB herstellen. Da einige Mitarbeiter von außen zeugreifen (via VPN) möchte ich, dass mein Programm beim Programmstart die Verbindung über einen Thread aufbaut. Also habe ich die Komponentenreferenz an den Thread weitergegeben, innerhalb mit Synchronize aufgerufen und trotzdem erhalte ich einen Absturz des Programms mit der Fehlermeldung "Abstrakter Fehler". Hier mal der Quelltext:

Delphi-Quellcode:
////////////
1. MainForm
////////////

if (dbData) then
begin
  ConnectToDb(ZConnection1, true, true);
end;

/////////////////////
2. Extra-DB-Unit
/////////////////////

function ConnectToDb(ZConnection: TZConnection; Suppress: Boolean = false; ShowSeekForm: Boolean = false): Boolean;
var
  SeekForm: TSeekDatabase;
  ConnectThread: TConnectThread;
begin
  if not (ZConnection.Connected) then
  begin
    if (ShowSeekForm) then
    begin
      SeekForm:=TSeekDatabase.Create(nil);
      SeekForm.Show;
      SeekForm.FormStyle:=fsStayOnTop;
      SeekForm.Refresh;
      ConnectThread:=TConnectThread.Create(True);
      ConnectThread.Connection:=ZConnection;
      ConnectThread.Resume;
    end else
  ...
...

/////////////////////
3. Connect-Thread
/////////////////////

TConnectThread = class(TThread)
  private
    procedure Execute;
    procedure ConnectToDB;
  public
    Connection: TZConnection;
  end;

procedure TConnectThread.Execute;
begin
  Synchronize(ConnectToDB);
end;

procedure TConnectThread.ConnectToDB;
begin
  Connection.Connect;
end;
Also, von Form1 wird die ZConnection an die Funktion ConnectToDB in die DB-Unit weitergegeben. Von dort wird die Referenz in den Thread weitergegeben.

Nochmal der Fehler: "Abstrakter Fehler"

Was mache ich falsch?

Danke!
  Mit Zitat antworten Zitat