AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Progressbar wird nicht aktualisiert

Ein Thema von Mongfice · begonnen am 4. Aug 2009 · letzter Beitrag vom 4. Aug 2009
Antwort Antwort
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#1

Progressbar wird nicht aktualisiert

  Alt 4. Aug 2009, 09:18
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Progressbar wird nicht aktualisiert

  Alt 4. Aug 2009, 09:25
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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#3

Re: Progressbar wird nicht aktualisiert

  Alt 4. Aug 2009, 09:40
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

Re: Progressbar wird nicht aktualisiert

  Alt 4. Aug 2009, 09:49
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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Mongfice

Registriert seit: 26. Feb 2009
40 Beiträge
 
Delphi 7 Professional
 
#5

Re: Progressbar wird nicht aktualisiert

  Alt 4. Aug 2009, 09:55
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!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz