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!