PDA

Vollständige Version anzeigen : Schlechtere ODBC-Performance mit Access 2002?


cnbrande
28.10.2003, 06:44
Hallo,

in unserem Projekt zum automatisierten Softwaretest verwendeten wir bisher Access 97 zur Haltung unserer Testdaten. Der Ablauf funktioniert grob gesprochen so: Ein Testtool (in diesem Fall SilkTest von Segue, ist aber egal) lädt aus der Datenbank die Werte, die es selbsttätig in die GUI eingeben soll; hierbei kommt eine objektorientierte tool-eigene Skriptsprache zum Einsatz, die über ODBC ein einfaches SELECT-Statement auf der Access-Datenbank absetzt. Das lief so lange problemlos, bis unser Kunde auf Office XP umgestellte: Seit die Testdaten in Access 2002 liegen, dauert ein vom Skript abgesetztes SELECT-Statement ca. 5 Sekunden, während unter Access 97 eigentlich keine nennenswerte Wartezeit zu beobachten war(!).

Hat jemand eine Idee, wie diese eklatante Verschlechterung zustande kommt? Und ist Abhilfe auf Access-Seite denkbar? Im Skript selbst sehe ich wenig Änderungspotenzial; trotzdem hier noch ein kleines Codebeispiel (falls es hilft und/oder interessiert):


HANDLE hDB, hBuffer
STRING sEntry
LIST OF STRING lsAllEntries = {}

hDB = DB_Connect( "DSN = ODBC-DSN-Name" )
hBuffer = DB_ExecuteSql( hDB, "SELECT * FROM Tabellenname" )

while DB_FetchNext(hBuffer, sEntry)
ListAppend(lsAllEntries, sEntry)

DB_FinishSql(hBuffer)
DB_Disconnect(hDB)


Besten Dank schonmal!
cb

Sascha Trowitzsch
28.10.2003, 10:45
Schwer zu sagen, an welcher Stelle die Verzögerungen auftreten.

Zunächst sollte der ODBC-Treiber möglichst aktuell sein. Das ist der sein, der in MDAC 2.5 SP3 enthalten ist. Siehe
http://support.microsoft.com/default.aspx?scid=/support/servicepacks/MDAC/2.5/SP3manifest.asp

Schau mal in den ODBC-Datenquellen nach, ob der Access-Treiber odbcjt32.dll die Version 4.00.6200 hat.
(Außer, ihr habt einen W2003Server, da gibt's noch einen neueren.)

Dann sollte auch JET auch auf dem neuesten Stand sein, sprich SP8.
( http://www.microsoft.com/downloads/results.aspx?productID=&freetext=JET+SP8&DisplayLang=de )

Diese ggfls. installieren.

Mit Access hat das nicht direkt zu tun. Der ODBC-Treiber setzt nur die ODBC-SQL- Funktionen für die Jet-Engine um, die auch ohne Access funktioniert, und greift damit direkt auf die MDB zu.
In der DSN kann man außerdem noch diverse Optionen einstellen. Vielleicht auch damit mal experimentieren.

Die Frage ist überhaupt: Mussten die Daten überhaupt nach AccXP konvertiert werden? (In welches Format eigentlich: 2000er oder XP?)
Denn grundsätzlich sind die Tabellen in A2000/XP deutlich größer wg. Unicode und (versteckten) Replikatfeldern.

Es könnten ja die Daten ohne weiteres im A97-Format belassen werden und als Backend in eine Access-XP-Datenbank verknüpft werden, falls damit unter Access gearbeitet werden muss.

Mehr fällt mir dazu nicht ein.

Ciao, Sascha

cnbrande
04.11.2003, 05:40
Hallo Sascha,

besten Dank für Deine informative Antwort. Kurz gesagt: Die Verwendung der von Dir genannten aktuelleren Versionen (Treiber, JET) hat das beobachtete Zeitverhalten leider in keinster Weise beeinflusst. Die von Dir genannten DSN-Optionen werde ich mir allerdings dieser Tage noch zur Brust nehmen.

Da mit Access weitergearbeitet werden sollte & Access 97 nicht mehr zur Verfügung steht, war die Konvertierung in 2002er-Format hier recht schnell beschlossene Sache.

Was mir momentan als "Ausweg" einzig noch vorschwebt: Generierung einer CSV-Datei mit den Tabelleninhalten, auf die das Testtool dann lesend zugreift. Hier scheint noch eine Menge Beschleunigungspotenzial zu stecken.

Howdy,
cb