Hallo,
beim Umstellen eines Programms von Methoden auf Stored Procedures soll das ganze in einen Thread gepackt werden. Die SP sind komplex und zeitaufwendig, bisher wurden diese von der Mainform übernommen. Dabei gab es dann ein Infofenster mit einer Pseudoprogressbar die signalisiert das etwas in Arbeit ist. Bei der Umstellung auf SP friert nun dieses Infofenster ein. Lösung: Auslagerung in Thread.
Ist der nachfolgende Ansatz so richtig oder was ist noch zu beachten. Geht er vielleicht einfacher?
Danke schon mal....
Delphi-Quellcode:
TMachWasLangesInDerDBThread =
class(TThread)
private
fSPQuery : TIBQuery;
fInProgress : Boolean;
protected
procedure Execute();
override;
public
constructor create(
const aPKey,aTKey:TKey; aChildLevel:Integer);
destructor Destroy;
override;
property InProgress : Boolean
read fInProgress;
end;
constructor TMachWasLangesInDerDBThread.create(
const aPKey,aTKey:TKey; aChildLevel:Integer);
begin
inherited create(False);
FreeOnTerminate := False;
fInProgress := True;
fSPQuery := TIBQuery.Create(
nil);
try
fSPQuery.SQL.Text:='
EXECUTE PROCEDURE P_SORT...';
fSPQuery.ParamByName(...);
except
on e:
exception do
begin
showmessage(e.
Message);
end;
end;
end;
destructor TMachWasLangesInDerDBThread.Destroy;
begin
if Assigned(fSPQuery)
then
begin
fSPQuery.Free;
end;
inherited destroy;
end;
procedure TMachWasLangesInDerDBThread.Execute;
begin
try
fSPQuery.ExecSQL;
except
on e:
exception do
begin
showmessage(e.
Message);
end;
end;
fInProgress := False;
end;
.... im Hauptprozess Aufruf durch...
...
MeinInfoFenster.show;
aMYThread := TMachWasLangesInDerDBThread.create(...);
try
while aMYThread.InProgress
do
begin
MeinInfoFenster.Action;
Sleep(1000);
end;
finally
aMYThread.Free;
end;
...