Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Bildschirmupdate bei Abfragen die lange dauern
zurück: Kalenderwoche (KW) im Dateinamen mit angeben weiter: 2 strings miteinander vergleichen? Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
shumy
Gast


Verfasst am:
26. März 2012, 07:46
Rufname:

Bildschirmupdate bei Abfragen die lange dauern - Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo zusammen,

ich habe eine Abfrage die ich per VBA starte. Diese greift auf eine Datenbank zu, die sehr langsam ist. DieAbfrage dauert fast 20 Minuten.
Während dieser Zeit wird der Bildschirm nicht mehr upgedatet. Soll heissen, wenn ein Fenster eines anderen Programms über die Accessoberfläche gezogen wird, dann wird der Bildschirm an dieser Stelle weiß. Shock

Gibt es eine Möglichkeit, dass das Accessformular weiterhin immer dargestellt und "refreshed" werden kann?

Besten Dank vorab & Grüße
Martin
KlausMz
Moderator Access


Verfasst am:
26. März 2012, 07:54
Rufname:
Wohnort: Irgendwo in der Pfalz


AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo,
Zitat:
DieAbfrage dauert fast 20 Minuten
Da sollte man wohl erst mal über die Abfrage nachdenken.
20 Minuten für eine Abfrage sind sehr lang.
Was macht die Abfrage?
Sind die Tabellen auf einem Server, oder direkt auf dem PC?

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Gast



Verfasst am:
26. März 2012, 08:18
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

die Tabellen sind auf nem Server. Für den Zugriff mit Access wurden spezielle Views erstellt, die sehr inperformant sind. Auf die Anpassung dieser Views habe ich jedoch keinen Einfluss, bzw es wird bereits von anderen daran gearbeitet, diese schneller laufen zu lassen.
Die Frage ist jedoch was kann ich machen, damit der Anwender nicht den Eindruck hat, dass Access abgestürzt ist (weisser Bildschirm), sondern tatsächlich noch eine Abfrage läuft?
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
26. März 2012, 12:35
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo,

eine 20-Minuten-Abfrage bedarf vermutlich in der Tat einer dringenden Überarbeitung...

Nichtsdestotrotz ist es möglich, die Anzeige von Access derweil nicht einfrieren zu lassen. Das Geheimnis heißt "asynchrone Abfragen". In der angehängten Beispiel-DB habe ich mal eine asynchrone ADO-Abfrage mit Bildschirmaktualisierung erstellt. Du mußt vor dem Öffnen des Formulars in den Code des Formulars gehen und im Load-Event die Daten für Deinen Server eingeben, damit Du es ausprobieren kannst.

Man benötigt ein Recordset, das auf Modulebene mit "WithEvents" deklariert wird, der Cursor muß außerdem auf "UseClient" eingestellt sein.

Man kann mit den Events "FetchProgress" und "FetchCompleted" dann abfragen, wie weit das Herunterladen gerade ist bzw. wann es fertig ist. Im Beispiel wird dem Klassenmodul in der Init-Prozedur der Link zu einer Textbox und einer ActiveX-Progressbar übergeben, die der FetchProgress-Event dann laufend aktualisiert.

Im Gegensatz zu in VBA erstellten langlaufenden Schleifen DARF man hier KEIN "DoEvents" in "FetchProgress" schreiben, das ist auch nicht notwendig, denn der Event läuft nun parallel zu Access in einem eigenen Thread. Access aktualisiert sich also, als wenn gerade nichts passieren würde, damit sieht man auch die Änderungen in den Controls.

Allerdings kostet so ein Progress-Event ziemlich viel Performance, das sollte man bedenken, wenn man so etwas verwendet, umso mehr natürlich, je mehr in dem Eventcode steht und je mehr Bildschirmausgabe stattfindet.

Die Alternative besteht darin, den FetchProgress-Event nicht zu verwenden (Löschen der ganzen Sub) und nur den FetchCompleted-Event, der dem User bescheid sagt, wenn das Recordset komplett geladen wurde. Ohne den FetchProgress-Event muß man die "Cancel"-Methode des rsADO-Objektes im Button selbst aufrufen, wenn man das Laden zwischendurch beenden möchte.

Im Beispiel habe ich noch einen Event im Klassenmodul definiert, der in FetchCompleted aufgerufen wird, damit sich das Formular an den Event hängen kann (Definition von "objADOAsynchron" in frmADOTest ebenfalls mit "WithEvents" auf Modulebene).
So kann das Formular eine eigene Event-Sub verwenden, um irgendetwas zu machen, wenn das Recordset komplett geladen wurde (hier eine Messagebox anzeigen).

Bei der asynchronen Methode muß man allerdings beachten, daß hier zwei parallele Threads laufen: Einmal der VBA-Thread und einmal der Thread, der das Recordset im Hintergrund lädt. Diese dürfen sich nicht in's Gehege kommen, sonst crasht Access komplett. Daher ist die oben beschriebene Event-Methode am besten geeignet, um dem Formular mitzuteilen, daß die Arbeit beendet wurde. Es muß im Code sichergestellt werden, daß kein anderer Codeteil auf das Recordset-Objekt zugreift (etwa ein "MoveFirst" auslöst), solange der Ladevorgang noch läuft. Also müssen alle entsprechenden Buttons etc. gesperrt werden, am besten einfach einen modalen Dialog öffnen, der mit dem Event sich selbst automatisch schließen kann, auf diese Weise kann der User nichts machen, aber der Bildschirmrefresh bleibt erhalten.

Es gibt übrigens ähnliche Methoden auch für DAO, die sind hier jetzt nicht enthalten.

Gruß

Christian



Asynchron.zip
 Beschreibung:
Zeigt die Verwendung von asynchronem Recordset-Download mit ADO, Format A2003

Download
 Dateiname:  Asynchron.zip
 Dateigröße:  24.48 KB
 Heruntergeladen:  70 mal

shumy
Gast


Verfasst am:
29. März 2012, 11:28
Rufname:


AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

vielen Dank schon mal für die ausführliche Antwort.
Das ganze scheint etwas tricky zu sein. Der Zugriff auf meine Datenbank funktioniert nicht. Ich greife übe odbc zu. Muss ich da noch irgendwas beachten?

Viele Grüße
Martin
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
29. März 2012, 20:21
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo,

naja, wenn Du per ODBC zugreifst, dann hast Du ja die entsprechenden Verbindungsdaten. Die mußt Du natürlich entsprechend in dem Connection String eintragen.

Nur reinkopieren hilft nicht. Und "funktioniert nicht" ist auch keine adäquate Fehlerbeschreibung...

Was hast Du gemacht/was war der Fehler usw.

Gruß

Christian
manu_
Gast


Verfasst am:
05. Apr 2012, 11:00
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

hallo bitsqueezer,

erstmal danke für das super beispiel.

bei mir läuft alles soweit. jetzt möchte ich mir eine neue tabelle im frontend anlegen ohne das eine tabelle im backend erstellt wird, weil ich dort keine neuen tabellen anlegen darf.
wenn ich objADOAsynchron.OpenRecordset "select .... into tab" ausführe wird im backend eine erstellt.
gibt es eine möglichkeit neue tabellen lokal anzulegen?

ziel:
eine asynchrone abfrage die mir eine tabelle lokal erstellt.

grüße
manuel
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
05. Apr 2012, 11:27
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo Manuel,

ADO kann im Gegensatz zu DAO nicht "interkulturell" arbeiten. Es gibt nur eine Verbindung, also entweder lokal oder SQL Server oder irgendeine andere Datenbank. Du kannst also innerhalb einer lokalen Datenbank Tabellen erstellen, Du kannst dagegen nicht die Daten mit SELECT von SQL Server laden und mit INTO gleichzeitig in eine lokale Tabelle schreiben.

Bei DAO werden die Tabellen verlinkt, damit hat jede Tabelle ihren eigenen Connection String und daher kann DAO SQL auch datenbankübergreifend innerhalb eines SQL Befehls arbeiten.

Du müßtest also die asynchrone Verarbeitung auf DAO umschreiben, wenn Du das beabsichtigst. Das funktioniert vom Prinzip her genauso, auch DAO kann asynchron arbeiten, auch da gibt es entsprechende Events. Ein Beispiel habe ich nicht parat, aber das Prinzip siehst Du ja im ADO-Beispiel. Du mußt Dir nur aus der Online-Hilfe die passenden Events aus dem DAO-Recordset herausholen und entsprechende Klassenmodule für DAO schreiben.

Gruß

Christian
manu_
Gast


Verfasst am:
05. Apr 2012, 13:06
Rufname:

AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

hallo christian,

danke für die schnelle antwort, werds mal probieren.

schöne feiertage
manuel
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
18. Apr 2012, 16:01
Rufname:


AW: Bildschirmupdate bei Abfragen die lange dauern - AW: Bildschirmupdate bei Abfragen die lange dauern

Nach oben
       Version: Office 2003

Hallo,

ich muß mich hier wohl korrigieren, offensichtlich hat DAO überhaupt keine Events zu bieten, somit funktioniert die asynchrone Geschichte nur mit ADO.

Gruß

Christian
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Daten abfragen nach Buchstabenreihenfolge 2 wrengers 699 07. März 2005, 22:59
Gast Daten abfragen nach Buchstabenreihenfolge
Keine neuen Beiträge Access Tabellen & Abfragen: mehrer abfragen ein formular 1 romu 719 10. Jan 2005, 15:54
lothi mehrer abfragen ein formular
Keine neuen Beiträge Access Tabellen & Abfragen: Parameter Abfragen mit "Drop Down Menu" 2 tomsingapore1 1620 23. Dez 2004, 17:56
tomsingapore1 Parameter Abfragen mit "Drop Down Menu"
Keine neuen Beiträge Access Tabellen & Abfragen: Memoformat in Tabelle wird bei Abfragen eiskalt trunkiert?!! 8 Muschimaus 1516 03. Dez 2004, 19:23
Skogafoss Memoformat in Tabelle wird bei Abfragen eiskalt trunkiert?!!
Keine neuen Beiträge Access Tabellen & Abfragen: Abfragen- Formularfeld als Kriterium 1 Gast 684 22. Nov 2004, 15:02
Felix15 Abfragen- Formularfeld als Kriterium
Keine neuen Beiträge Access Tabellen & Abfragen: Platzhalter in Abfragen einbinden 2 santje243 915 06. Nov 2004, 12:01
santje243 Platzhalter in Abfragen einbinden
Keine neuen Beiträge Access Tabellen & Abfragen: spezielle Abfragen 1 Hilfe 704 27. Sep 2004, 17:47
Skogafoss spezielle Abfragen
Keine neuen Beiträge Access Tabellen & Abfragen: Leere Felder in Abfragen ausblenden. 3 Gast 1374 18. Aug 2004, 14:39
mabe38 Leere Felder in Abfragen ausblenden.
Keine neuen Beiträge Access Tabellen & Abfragen: SQL Abfragen ausgeben?? 2 woerny01 669 11. Jul 2004, 07:10
Gast SQL Abfragen ausgeben??
Keine neuen Beiträge Access Tabellen & Abfragen: Eingabefelder in Abfragen?!?! 6 Diovan80 609 28. Jun 2004, 09:51
Diovan Eingabefelder in Abfragen?!?!
Keine neuen Beiträge Access Tabellen & Abfragen: Geänderte Feldnamen in Abfragen, Formulare usw. übernehmen 4 mondi 770 23. Jun 2004, 11:21
mondi Geänderte Feldnamen in Abfragen, Formulare usw. übernehmen
Keine neuen Beiträge Access Tabellen & Abfragen: abfrage dauert lange 2 Picknicker444 575 08. Jun 2004, 15:01
Picknicker444 abfrage dauert lange
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: CSS Forum