![]() |
Progressbar wird nicht aktualisiert
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:
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.
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; Hat jemand ne Idee, warum das mit der 2. Progressbar und dem Label nicht klappt, mit der 1. allerdings schon? Gruß Mongfice |
Re: Progressbar wird nicht aktualisiert
Form1.Refresh sendet nur die Message, das die Form neu gezeichnet werden soll. Brauchst du aber eigentlich gar nicht. Probiere mal Application.ProcessMessages, das gibt der Progressbar Zeit sich neu zu zeichnen.
MfG, Bug |
Re: Progressbar wird nicht aktualisiert
Mhh, hab jetzt alle Refreshes durch das Application.ProcessMessages ersetzt.
Das hat zwar den ungeahnten Vorteil, dass die Anwendung nicht als "Reagiert nicht" im Taskmanager steht und (vollkommen unnütz) auch das animierte Logo das noch drauf ist dauerhaft funktioniert. Nur am eigentlichen Problem ändert sich nix. Das Label wird zwar auch so aktualisiert, die 2. Progressbar aber leider nicht :-( |
Re: Progressbar wird nicht aktualisiert
Kann es sein das RecordCount > 100 ist? Dann wäre Progressbar2.Step nämlich 0.
Wenn ja, dann lass Progressbar2.Step mal bei 1 und setze Progressbar2.Max auf RecordCount. MfG, Bug |
Re: Progressbar wird nicht aktualisiert
Jo, genau das ist mir grad selbst auch aufgegangen.
Ich bin so blöde... Der ist sogar sehr deutlich größer als 100, deshalb brauch ich ja überhaupt die Progressbar... Sorry, für's Zeitverschwenden und danke!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz