Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Firebird embedded mit Threads

  Alt 11. Sep 2009, 23:44
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...
  Mit Zitat antworten Zitat