|
|
Hans Brender
Für alle, die bisher mit Microsoft Access über die DAO zugegriffen haben (Jet-Problematik)
und die sich jetzt mit ADO beschäftigen, zeigen wir hier einige Tipps, wie sie
Hürden und Klippen in ADO umgehen können.
Original-Microsoft Links mit nützlichen (englischen) MDAC-Artikeln:
-
Q232053
INFO: List of Files Installed by MDAC 2.1 (GA)
-
Q238239
INFO: List of Files Installed by MDAC 2.1 SP 2
-
Q174191
SAMPLE: ODBC 3.0 Installation
-
Q175018
HOWTO: Acquire and Install the Microsoft Oracle ODBC Driver
-
Q170769
PRB: ODBC Resource DLL Is a Different Version Than ...Error
-
Q177913 HOWTO: Use the MDAC Standalone Setup EXE in Unattended Mode
-
Q216149
How to Install ODBC or MDAC on Terminal Server
-
Q191094
PRB: MDAC 2.0 Requires DCOM95 to Install Under Windows 95
-
Q190463
INFO: What are MDAC, DA SDK, ODBC, OLE DB, ADO, RDS, and ADO/MD?
-
Q190475
INFO: Understanding Microsoft's Oracle ODBC Driver Versions
-
Q190773 INFO: ODBC/OLE DB/ADO/RDS Are Inter-Dependent for MDAC 2.0
Die nachfolgenden Artikel sind auch korrekt für spätere MDAC - Versionen, dies
bedeutet, dass Installation und Distribution individueller MDAC - Komponenten
weder vorgesehen noch unterstützt werden !!
-
Q191704
PRB: Unable to Load File to Register It During Setup -- msdadc.dll
-
Q185622 HOWTO: Add the MDAC Redistribution Setup to CAB Files
-
Q232525
FP2000: After installing MS PWS 4.0, MDAC is Downgraded
-
Q218184 PRB: Restart After MDAC Installation Causes Error
ADO 2.0 und 2.1
Was ist die zur Zeit gültige Version von ADO (MDAC) ? 2.0 , 2.1 oder 2.5 ?
Microsoft warnt eindeutig, die Version 2.1 außerhalb von Testumgebungen
einzusetzten, ohne dass das Servicepack MDAC 2.1 SP1 herausgebracht wurde. Es
kann zu Instabilitäten kommen. Hintergrund ist der, dass ADO 2.1 im ServicePack
5 des SQL-Servers 6.5 bzw. mit dem neuen SQL-Server 7.0 ausgeliefert wird.
Dabei wird auch der neue OLEDB Provider für Jet ( Version #4.00.2115.25 )
installiert. Wird dieser Treiber von außen (z.B. VB/VC) angesprochen, kann es
zu Problemen kommen. (siehe Microsoft)
Welche MDAC Version ist auf meinem Rechner installiert ?
Die Antwort finden Sie in den Dateien Msdadc.dll und Oledb32.dll. Besser ist
jedoch genaue Analyse durch den Microsoft MDAC Componenten Checker
| MDAC version |
Msdadc.dll |
Oledb32.dll |
Notes |
|
MDAC 1.5c |
1.50.3506.0 |
N/A |
|
|
MDAC 2.0 |
2.0.3002.4 |
2.0.1706.0 |
|
|
MDAC 2.0 SP1 |
2.0.3002.23 |
2.0.1706.0 |
|
|
MDAC 2.0 SP2 |
2.0.3002.23 |
2.0.1706.0 |
Superset: SP1 |
|
MDAC 2.1.0.3513.2 (SQL) |
2.10.3513.0 |
2.10.3513.0 |
|
|
MDAC 2.1.1.3711.6 (Internet Explorer 5) |
2.10.3711.2 |
2.10.3711.2 |
|
|
MDAC 2.1.1.3711.11 (GA) |
2.10.3711.2 |
2.10.3711.9 |
|
|
MDAC 2.1.2.4202.3 (GA) SP2 |
|
|
|
| MDAC 2.7 SP1 (WinXP) |
2.71.9030.0 |
2.71.9031.4 |
|
Seit dem 1.7.99 verfügbar: MDAC 2.1.2.4202.3 (GA):
Microsoft ADO 2.1
Seit April 2000 auch für MDAC 2.5 RTM geeignet
Microsoft MDAC Component Checker
Die Problematik der installierten MDAC - Version hat sich noch nicht entspannt.
Allerdings hat Microsoft mit dem MDAC Component Checker ein Tool zum Download
zur Verfügung gestellt, welches
-
die installierte MDAC -Installation auf einem PC identifiziert
-
eine Serie von Reports generiert, die alle benötigten Dateien identifiziert und
lokalisiert
-
DLL- Konflikte aufzeigt und die bestehende MDAC Installation auf Wunsch
entfernt
Die Download - Größe des gepackten Component-Checkers beträgt 573 KB
Welche Versionen gibt es und woher stammen sie ?
1.5 (IE4.0) = 1.5 (IE4.0)
1.5 PDC97 = 1.5 PDC97
1.5a SDK = 1.5a
1.5b OCM setup = 1.5b
1.5c SDK = 1.5c
1.5d (IE4.0 SP1) = 1.5d (IE4.0 SP1)
2.0.3002.20 (GA) = 2.0
2.0.3002.23 (NT4 SP4) (OLAP) = 2.0 SP1 (OLAP)
2.0.3002.23 (NT4 SP4) = 2.0 SP1
2.0.3002.28 (GA) = 2.0 SP2
2.1 SP2 (2.1.2.4202.3) GA = 2.1 SP2 (2.1.2.4202.3) GA
2.1.3513.2 (SQL) = 2.1 RTM
2.1.3711.11(GA) = 2.1 GA
2.1.3711.6 = 2.1 SP1
2.50.3719.14 (Win2K Beta3) = NT4.0 - 2.50.3719.14
2.5 (4403.3) = 2.5 (4403.3)
2.5 Release (2.50.4403.12) = 2.5 RTM (2.50.4403.12)
im Beta-Test: 2.6
|
ADO-ODBC
Gegeben sei ein Query, welches über 2 Tabellen eine SQL Abfrage definiert,
wobei in beiden Tabellen eine Spalte den gleichen Feldnamen hat:
|
Adresse |
Kommunikation |
|
|
ID |
ID |
<-- beide Tabellen haben ein Feld mit gleichem Namen |
|
Name |
Telefon |
|
|
Vorname |
Fax |
|
Die SQL-Syntax sieht unter Access wie folgt aus:
SELECT Adresse.ID, Adresse.Name, Kommunikation.ID,
Kommunikation.Telefon
FROM Adresse, Kommunikation;
Access SQL ist in der Lage und stellt bei Gleichheit zweier Feldnamen durch
Voranstellen des Tabellennamens eine Eindeutigkeit her.
Wenn Sie dieses Query in Access abspeichern und über ADO-ODBC auf dieses Query
zugreifen, und in Ihrem Recordset danach auf den Feldnamen zugreifen, werden
Sie feststellen, dass der Tabellenname verlorengeht.
RS![Adresse.Id] <-- ergibt einen Fehler
Abhilfe:
Umgestalten des gespeicherten Querys oder Zugriff nicht über Feldnamen sondern
Feldnummer.
ADO-Access native
Wer seine Querys in Access gespeichert hat, und auf diese nur noch mit dem
Namen zugreift hat bei der Umstellung auf ADO Version 2.0 ein Problem.
Es ist nämlich mittels des Jetproviders 3.5x nicht möglich, auf gespeicherte
Aktions-Abfragen zuzugreifen. Dies beinhaltet alle Delete, Update
oder Insert Abfragen.
Aufgrund der unterschiedlichen SQL-Syntax und den damit verbundenen Problemen
hat Microsoft den Zugriff aus dem Nativen Treiber immer noch gesperrt.
Workaround:
-
Über ADO-Schemata das Query auslesen, und als SQL-String übergeben. Dabei
müssen Sie jedoch Performance-Einbußen hinnehmen und eine Methode zum Lesen des
SQL-Schemas programmieren.In späteren funktionierenden Versionen können Sie
dann den Zugriff auf das SQL-Schema unterbinden
Abhilfe:
-
den Zugriff auf Access von nativem Treiber auf Zugriff über ODBC umstellen
ADO-ODBC-Access
Wer über parametrisierte Abfragen via DAO auf die Access-Datenbank zugreift,
hat in der Vergangenheit (Access 2.0) schon erste Probleme erfahren. Damals
wurde nämlich mit dem Update auf Version 2.5 kein explizites Casting mehr durch
die Jet-Engine durchgeführt, dies musste der Programmierer selbst erledigen.
Urplötzlich verhielt sich die Applikation ohne jede Source-Code Änderung ganz
anders.
Wer seine Applikation im Hinblick auf Upsizing zu einer "höheren" Datenbank
(SQL-Server, Oracle, etc.) auf die neue, von Microsoft propagierte
Zugriffsmethode ADO umstellen will, hat erneut mit den Tücken zu kämpfen. Zum
einen sind parametrisierte, in Acess97 hinterlegte Abfragen über den nativen
OLEDB-Treiber in der ADO-Version 2.0 schlichtweg nicht möglich. Zwar lassen
sich normale Parameterabfagen erledigen, aber bei Update- oder Delete-Abfagen
versagt der native Treiber schlichtweg seinen Dienst ( siehe
ADO-Access-nativ). Bleibt nur noch der Zugriff auf Access97 über ADO und
ODBC.
Während mit der DAO die Reihenfolge der Parameter, wenn Sie mit dem Namen
übergeben wurde, unerheblich war, die Jet-Engine erledigte dies, ist dies beim
ODBC-Treiber leider nicht so. Die benannten Parameter müssen in genau der
Reihenfolge übergeben werden, wie sie in Access als Parameter hinterlegt worden
sind.
gespeicherte Abfrage in Access SQL:
PARAMETERS KOPF Long,
SERPOS Text;
SELECT SerienPosition.Id ...
Die Reihenfolge der benannten Parameter muss zuerst KOPF
und dann SERPOS lauten.
|
|