Fragensteller
Problem bei loop und .setfocus

Allgemeine Diskussion
-
Hallo Zusammen,
ich möchte gerne den Bearbeitungsfortschrift von Prozessen die ich in einem loop durchführe durch ein Formular monitoren.
Das heist, ich öffne in der Prozedur ein Formular, dass die bspw. zu ändernden Daten zeigt - oder einfach nur ein ungebundenes Feld hat in das ich die Anzahl der bearbeiteten Datensätze schreibe. Danach verändere ich mit ADO den Datensatz. Sobald ich das getan habe will ich das Formular in den Fucus ziehen und aktualisieren:
Forms!meinFormular.SetFocus
Forms!meinFormular.Recalc
'Danach dann
cnn.MoveNext
loop
Leider klappt das neue Anzeigen aber nur bei den ersten 3-4 Datensätzen. Danachh passiert nichts mehr, bis wirklich alle Datensätze durchlaufen sind. Das können zuweilen schon mal einige hundert sein. Es läuft aber alles richtig durch und wenn es fertig ist, wird das Formular auch mit den korrekten Werten angezeigt.
Ich würde es aber gerne nach jedem Datensatz aktualisieren. Was mache ich falsch?
Vielen Dank und viele Grüße
Patrick
- Typ geändert Robert BreitenhoferModerator Dienstag, 20. März 2012 13:43 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Ich denke mal, das es zuviele Ereignisse sind, die hier einer Optimierung zum Opfer fallen.
In diesem Fall würde ich einen Ansatz mit einer Eigenschaft wählen, d.h. das Formular zur Fortschrittsanzeige bekommt (im einfachen Fall) zwei Eigenschaften AnzahlSchritte und aktueller Schritt, wobei die Set-Methoden das Neuzeichnen übernehmen. Z.B.
Option Compare Database Option Explicit Private m_MaxSteps As Long Private m_CurrentStep As Long Public Property Get CurrentStep() As Long CurrentStep = m_CurrentStep End Property Public Property Let CurrentStep(AValue As Long) m_CurrentStep = AValue DisplayProgress End Property Public Property Get MaxSteps() As Long MaxSteps = m_MaxSteps End Property Public Property Let MaxSteps(AValue As Long) m_MaxSteps = AValue DisplayProgress End Property Private Sub DisplayProgress() Dim Percentage As Long Percentage = 0 If m_MaxSteps > 0 Then Percentage = (m_CurrentStep * 100) / m_MaxSteps End If lblProgress.Caption = Percentage & "%" Me.Repaint End Sub
Und Aufgerufen mit
Option Compare Database Option Explicit Private Sub btnInit_Click() Forms!frmProgress.MaxSteps = 100 Forms!frmProgress.CurrentStep = 0 End Sub Private Sub btnStep_Click() Forms!frmProgress.CurrentStep = Forms!frmProgress.CurrentStep + 1 End Sub
Allerdings bevorzuge ich die SysCmd-Methode und der Anzeige in der Statusleiste.
-
Am 12.03.2012 schrieb Patrick Pohlmann:
Das heist, ich öffne in der Prozedur ein Formular, dass die bspw. zu ändernden Daten zeigt - oder einfach nur ein ungebundenes Feld hat in das ich die Anzahl der bearbeiteten Datensätze schreibe. Danach verändere ich mit ADO den Datensatz. Sobald ich das getan habe will ich das Formular in den Fucus ziehen und aktualisieren:
Forms!meinFormular.SetFocus
Forms!meinFormular.Recalc
'Danach dann
cnn.MoveNextSetz hier ein DoEvents ein.
loop
Evtl. hilft es.
Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/ -
****************************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
****************************************************************************************************************Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.