Ich nähere mich an:
Delphi-Quellcode:
function CurrentThread: TThread;
var
Thread: TThread;
I: Integer;
ID: Word;
begin
Result := nil;
ID := GetCurrentThreadId;
for I := 0 to ThreadList.Count - 1 do
begin
Thread := TThread(ThreadList[I]);
if Assigned(Thread) then
begin
if Thread.ThreadID = ID then // der ID-Vergleich funktioniert
begin
Result := Thread; // der laufende Thread wird gefunden
Exit;
end;
end;
end;
end;
var
I: Integer;
TmpIBSql: TIBSql;
Thread: TThread;
ThreadIBDatabase: TIBDatabase;
ThreadIBTransaction: TIBTransaction;
...
Thread := CurrentThread;
if not Assigned(Thread) then
begin
TmpIBSql.Database := IBDatabase; // dies wird "normalerweise" ausgeführt
TmpIBSql.Transaction := IBTransaction;
end
else
begin
Beep; // dies wird ausgeführt, wenn ein Thread läuft :-)
ThreadIBDatabase := TIBDatabase.Create(Self);
ThreadIBDatabase.SetHandle(IBDatabase.Handle);
ThreadIBTransaction := TIBTransaction.Create(Self);
ThreadIBDatabase.DefaultTransaction := ThreadIBTransaction;
ThreadIBTransaction.StartTransaction;
TmpIBSql.Database := ThreadIBDatabase;
TmpIBSql.Transaction := ThreadIBTransaction;
end;
Result := TmpIBSql;
...
Offenbar werden die
SQL-Routinen innerhalb des Threads jetzt korrekt ausgeführt. Jetzt treten aber Fehler auf, wenn der Thread beendet ist und wieder der "normale" Weg beschritten wird...
Ich werde das morgen mal weiter versuchen...