|
New user
Beiträge: 3
| Hallo Allerseits. ;-)
Ausgangslage/Prozedur:
Nach dem Klick auf einen Button, wird via VBA-Prozedur eine Prozedur aufgerufen:
In dieser aufgerufenen Prozedur („Meldung“) wird ein dynamisches Formular erstellt (mittels create Form)
Eine Objekt/Themen-ID via SQL ausgewertet (als Parameter, beim Aufruf übergeben)
Dann wird ein Recordset befüllt mit 4 Ausgabefelder.
Dauer bisher bei der Ausführung: weniger als eine Sekunde
Das Recordset ist nun beispielsweise mit 60 Datensätzen befüllt.
Jeder Datensatz bestimmt, welches Control (Textfeld, Combo- und Listboxen) dynamisch zu erstellen ist.
In einer For-Schleife werden,
je nach Controltyp, die entsprechenden Eigenschaften/Werte mittels SQL-Abfrage generiert und dann dem Control zugewiesen.
Nach der Schleife wird noch einige Prüfarbeit erledigt und dynamischer Code geschrieben und das soeben dynamisch erstellte Fenster/Formular geöffnet.
Die Schleife benötigt Zeit (Access 2020/Win10/aktueller Mehrkern Intel-Rechner).
Bei ca. 60 Controls kann es gut 15Sekunden dauern, bis das Formular/Fenster geöffnet wird.
So weit so schlecht.
Habe Indizes gesetzt, Abfragen und Tabellen optimiert. Hat nicht wirklich geholfen, die Zeit bedeutend zu verkürzen.
Jetzt kommts: Aus Langeweile oder auch Verzweiflung dachte ich an einen Fortschrittsbalken, damit der User weiß, dass da noch etwas kommt. Für (nicht nur) ungeduldige User sind 15 Sekunden eine Ewigkeit.
Meine Bedenken dabei: Es wird noch langsamer.
Aber: Es ist schneller geworden! Und zwar um einiges. Das Fenster ist jetzt nach 4 Sekunden offen und das ist schon fast zumutbar.
Wie habe ich‘ s bewerkstelligt?
Eine zweite Form „Fortschrittsformular“ mit 2 Controls erstellt (statisch).
Diese öffne ich via VBA, bevor ich die oben beschriebene Prozedur „Meldung“ aufrufe.
In der nachfolgend aufgerufenen Prozedur „Meldung“, am Schleifenanfang, aktualisiere ich nun bei jedem Durchgang den Fortschrittsbalken im „Fortschrittsformular“, indem ich die Weite eines Controls um 1 erhöhe.
Dazu kommt ein DoEvents und ein SetFocus auf das „Fortschrittsformular“.
Nehme ich den SetFocus raus, braucht das dynamische Formular wieder die Ewigkeit von min. 15 Sekunden zur Erstellung.
Warum wird Access schneller, wenn ich bei jedem Schleifendurchgang, den Focus auf ein anderes geöffnetes Formular setze?
Hat jemand eine Erklärung dafür? | |
|