Jet 4/MDB/ODBC

Um eine “Alte” 32bit-Applikation, die ihre Daten aus einer ODBC-Quelle bezieht, auf einem x64-basierenden Windows 7 zum Laufen zu bringen, muss eine 32-bit ODBC-Verbindung eingerichtet werden. Das unter Systemsteuerung/Verwaltung/Datenquellen (ODBC) zu erreichende Formular für die ODBC-Erstellung ist (obwohl es selbst odbcad32.exe heisst) für 64-bit-Verbindungen zuständig. Dies ist recht einfach an der angezeigten Treiberliste erkennbar:

Bild
Abb. Treiberliste odbcad32 (64bit)

Bild
Abb. Ausschnitt aus der Taskliste(64bit)

Wenn die ODBC-Quelle hier eingerichtet wird, erscheint bei Verbindungsaufbau des 32bit-Clients ein Fehler, der meint, dass die konfigurierten Plattformen nicht zueinander passen. Einzige Lösung ist die DSN hier zu löschen und mit dem 32-bit Konfigurationstool für ODBC neu zu erstellen. Dies geschieht durch Aufruf von

%systemdrive%\Windows\SysWoW64\odbcad32.exe

Die Treiberliste zeigt nun einige Einträge mehr; das liegt daran, daß für die 64bit-Plattform kaum Treiber existieren, die für die 32bit-Plattform aber bereits im Lieferumfang sind oder mit diversen Applikationen mitinstalliert werden.

Bild
Abb. odbcad32 (32bit)

Bild
Abb. Ausschnitt aus der Taskliste (32bit)

Da beide Programmversionen des ODBC-Administrators gleich heissen, können sie nicht gleichzeitig laufen. Hier also sicherstellen, dass nur die Version gestartet wird, die auch benötigt wird. Der DSN, der angelegt und von der Applikation benutzt werden soll darf dann auch nur einmal existieren.

Im Lieferumfang des SQL-Servers befindet sich ein Profiler, mit dem man sich ansehen kann, wer, wann und wie mit der SQL-Engine kommunziert. Jede Abfrage und deren Laufzeit ist zu sehen. Schön, aber was tun bei Projekten, die so klein sind, daß der SQL-Server wegen Aufwand und/oder Kosten nicht zum Einsatz kommen kann und soll? Erfahrung hilft auf jeden Fall weiter, aber man kann indirekt auch zusehen, was die Applikation mit der Jet-Datenbank macht….

Dazu den Registrierschlüssel

HKLM\Software\Microsoft\Jet\4.0\Engines\Debug\JETSHOWPLAN

vom Typ String anlegen (sollte “Debug” nicht existieren, auch diesen Schlüssel anlegen!) und mit dem Wert “ON” versehen. Es wird eine Datei namens “showplan.out” erzeugt, in der sich die Abfragen zwar nicht als Definitionswiedergabe, wohl aber unter Angabe des Tabellennnamens, der Indexnutzung und der Einschränkungen wiederfinden.

Das ganze sieht dann in etwa so aus:

— temp query —

- Inputs to Query -
Table ‘Tabellenname’
– End inputs to Query -

01) Restrict rows of table Tabellenname
using index ‘Indexname’
for expression “Spaltenname=2″

Wobei natürlich “Tabellenname”, “Indexname” und “Spaltenname” durch die relevantren Daten ersetzt sind. Leider werden die Laufzeiten der Abfragen nicht geloggt, sodaß zum Beispiel eine Performancesteigerung doch etwas Fummelei benötigt. Allerdings sollte Jet ja auch nicht bei großen Datenmengen zu Einsatz kommen…..

Nach erfolgreichem “Debug” nicht vergessen die Funktion wieder auszuschalten, die Datei “showplan.out” wird sehr schnell sehr groß, außerdim hat die Jet-Engine anderes zu tun, als ihre Funktion in einer Textdatei kundzutun.