Moin!
Ich hab folgendes Problem:
Ich habe eine Patch-Datei eine größere Änderung an einer
DB geschrieben.
Da ich sowohl ne Test-Datenbank habe als auch eine "echte" kann ich über eine Checkbox nach Programmstart auswählen, ob ich die "echte"
DB patchen will oder die Test-
DB. Der eigentliche Patch wird über einen Timer gestartet. Alles kein Ding und der Patch läuft auch einwandfrei durch.
Da das Ganze nun aber etwas länger dauert hab ich zwei Progressbars eingebaut, eine die den Gesamtfortschritt anzeigt und eine die den Fortschritt der aktuellen Aufgabe anzeigen soll. Zusätzlich gibts noch ne Label, das die aktuelle Aufgabe anzeigt.
Das Problem ist, dass die zweite Progressbar und das Label nicht aktualisiert werden.
Das Label hab ich inzwischen ans laufen gebracht, indem ich explizit einen Refresh des Hauptformulars eingesetzt habe, nachdem das Label geändert wurde.
Das Gleiche bringt bei der zweiten Progressbar aber leider keinen Erfolg, die wird schlichtweg nie aktualisiert (bzw. aktualisiert wird sie, nur sieht man davon nichts).
Der Aufbau ist an sich wie folgt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Progressbar1.Step:= 100
div 25;
timer1.enabled:=false;
label1.Caption:='
Verbindung zur Datenbank wird hergestellt.';
try
//"echte DB"
if cbDB.Checked
then
connectDatenDB;
// TestDB
else
connectDatenTestDB;
MyConnection1.Connected:=true;
except
if MessageDlg('
Verbindung zur Datenbank fehlgeschlagen!',mtError, [mbOK], 0) = mrOK
then
close;
end;
label1.Caption:='
Patch wird ausgeführt.';
try
// SQL-Scripte ausführen (Tabellen anpassen/anlegen etc.)
aktAufgabe.Caption:= '
Aufgabe 1';
Form1.Refresh;
//diese Refreshes brauch ich damit wenigstens das Label aktualisiert wird.
{1.}Script1.Execute;
Progressbar1.StepIt;
aktAufgabe.Caption:= '
Aufgabe 2';
Form1.Refresh;
{2.}WKABerichtTexte.execute;
Progressbar1.StepIt;
.
.
.
//Änderungen durchführen
{14.}Aenderungen1;
Progressbar1.StepIt;
{15.}Anderungen2;
Progressbar1.StepIt;
.
.
.
aktAufgabe.Caption:= '
';
MessageDlg('
Datenbankaktualisierung erfolgreich!',mtInformation, [mbOK], 0);
close;
except
MessageDlg('
Fehler bei der Datenbankaktualisierung!',mtError, [mbOK], 0);
close;
end;
end;
procedure TForm1.Aenderungen1;
begin
with qTemp
do
begin
sql.Text:= '
Select * from tabelle1';
open;
aktAufgabe.Caption:= '
Änderungen 1';
Progressbar2.Step:= 100
div RecordCount;
Progressbar2.Position:=0;
Form1.Refresh;
//Refresh für die Aktualisierung des Labels (ohne klappt auch das nicht)
for i:= 0
to RecordCount-1
do
begin
//Hier stehen die Änderungen;
next;
Progressbar2.StepIt;
Form1.Refresh;
//Wird zwar in jedem Durchlauf ausgeführt, aber zu sehen ist nix. Warum?
end;
close;
end;
end;
Hab das ganze auch schon debugged, die Refreshes werden alle durchgeführt, und der Patch läuft wie gesagt einwandfrei durch, nur man sieht keine einzige Änderung an der Progressbar2. Ohne die Refreshes wird auch das Label "aktAufgabe" nicht aktualisiert. Die Progressbar1 funktioniert einwandfrei.
Hat jemand ne Idee, warum das mit der 2. Progressbar und dem Label nicht klappt, mit der 1. allerdings schon?
Gruß
Mongfice