AW: schlechte Performance
16.07.2008 13:25:00
Luschi
Hallo Patrick,
wenn man externe Daten importiert, dann sollte man in Excel folgende Eigenschaften/Ereignisse abschalten:
- Bildschirmaktualisierung
- automatische Berechnung
- Ereignisausführung
Das kann man mit einer Prozedur realisieren:
Sub getMoreSpeed(bDoIt As Boolean)
Application.ScreenUpdating = Not (bDoIt)
Application.EnableEvents = Not (bDoIt)
Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
Application.Cursor = IIf(bDoIt, 2, -4143)
End Sub
Vor dem Aufruf der Abfrage schreibst Du:
getMoreSpeed True
und nach der Ausführung der Abfrage:
getMoreSpeed False
Damit hast Du Excel während der Ausführung der Abfrage ruhig gestellt. Solltest Du Daten aus Accesstabellen nach Excel holen und die Where-Klausel ist kompliziert aufgebaut (viele Nebenbedingungen), dann hast Du mit der Standard-Lösung (Daten-Externe Daten importieren...)schlechte Karten.
Da Access eine Standalone-Anwendung ist, schickt Access alle Datensätze zurück und erst Excel muß dann die Datensätze filtern, die der Abfrage entsprechen (also die Where-Bedingung auszuwerten).
Hier ist dann eine Lösung per ADODB/ADOX notwendig. Aber auch dafür habe ich ein Lösungsbeispiel parat. Kommen die Daten vom einem SQL-Server (MS-SQL, Oracle, DB2, Informix usw.) dann reicht die Standardlösung. Denn diesen Programmen ist es eigen, die komplette Abfrage auszuwerten und nur die tatsächlich gefundenen Datensätze auf die Reise zu schicken.
Gruß von Luschi
aus klein-Paris