Statusbaropdateinng under commit af databaseændringer
Databasekomponenten er TDatabase (databasen Firebird).Jeg laver en ordentlig klump kritiske ændringer i en stor database. Benytter i den forbindelse transaktionstyring. Når der comittes kan der gå op til 5 minutter. Jeg kunne godt tænke mig en løbende opdatering af en TStatusBar i dette tidsrum - men hvordan?
Den løsning jeg pt. fusker med er:
1. Databaseoperationen kører i main thread
2. Min opdatering af TStatusbar kører i en anden tråd og den prøver jeg få til at opdatere min statusbar.
// Tråden er så simpel...
procedure TCommitingStatusThread.Execute;
begin
while not Terminated do
begin
inc(fDots);
if fDots > length(fDotSt) then
fDots := 0;
if not Terminated then
begin
Synchronize(UpdateDots);
Sleep(1000);
end;
end;
end;
procedure TCommitingStatusThread.UpdateDots;
begin
fStatusBar.SimpleText := 'Gemmer ændringer, vent' + copy(fDotSt,1,fDots);
Application.ProcessMessages;
end;
Det virker bare ikke. Commit kører og giver ikke magten fra sig før den er færdig.
Kan jeg løse det ved at flytte databaseoperationen over i en tråd og lade den køre parallelt med min status-tråd eller hvad?
