MS Access DAO Windows 7

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Habe bisher unter Windows XP mit folgender Verbindung zu einer MS Access Datenbank gearbeitet (Basis von gerold):

Code: Alles auswählen

  def getQuery(self, query, db):
    con = Dispatch(r'ADODB.Connection')
    con.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + db)
    result_set = con.Execute(query + ';')
    columns = result_set[0].GetRows(MAX_ROWS)
    con.Close()
    return columns
Arbeite nunmehr auch mit Windows 7 64 bit, Python 2.6 64 bit PythonWin und bekomme Fehlermeldung:

File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 272, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, u'ADODB.Connection', u'Der Provider kann nicht gefunden werden. M\xf6glicherweise ist er nicht richtig installiert worden.', u'C:\\Windows\\HELP\\ADO270.CHM', 1240655, -2146824582), None)

msjet40.dll ist im Verzeichnis c:/windows/SysWOW64 vorhanden, Hilfeseiten Microsoft mit ADO270.CHM helfen mir nicht weiter.

ist Euch bitte etwas dazu bekannt ?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Werde mir das näher anschauen, danke für die Antwort.

Ursprüngliche Lösung zum Laufen bringen, würde ich aber wegen allfälliger derzeit nicht absehbarere Folgewirkungen bevorzugen.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@genders: nach welcher Zeile in deinem Skript wird der Fehler denn geworfen? Das geht aus der Fehlermeldung nicht hervor.

Gruß, noisefloor
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

noisefloor, leider habe ich unkomplette Fehlermeldung dazu gegeben, danke, habe zwischenzeitig weitere Test zur Absicherung auf beiden Rechner mit gleichem File durchgeführt, mit Windows XP Phyton 2.6 Pywin32 32 bit ok, Windows 7 Fehlermeldung

Traceback (most recent call last):
File "C:\Python26\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
exec codeObject in __main__.__dict__
File "E:\Tischtennis\Allgemein\UVOP\DbHandling.py", line 77, in <module>
b = a.getQuery("select * from [Stichtage]", db)
File "E:\Tischtennis\Allgemein\UVOP\DbHandling.py", line 18, in getQuery
con.Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + db)
File "<COMObject ADODB.Connection>", line 3, in Open
File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 272, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, u'ADODB.Connection', u'Der Provider kann nicht gefunden werden. M\xf6glicherweise ist er nicht richtig installiert worden.', u'C:\\Windows\\HELP\\ADO270.CHM', 1240655, -2146824582), None)
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ok, thx. Aber: ich kann auch nur raten. :K

Wenn es auf WinXP 32 bi funktioniert und Win7 64 bit nicht liegt die Vermutung nah, dass sich bei Windows (API, Libs... ?) was geändert hat... was auch immer.

Vielleicht lieber doch ODBC? ;-)

Gruß, noisefloor
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Eventuell liegt es daran, dass man keine 32-Bit DLLs in 64-bit Prozesse reinladen kann. Du musst also die 32-Bit-Version von Python nehmen oder eine 64-Bit-Version der DLL installieren.
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Theorethisch alles 64 bit Versione Windows 7, Python 2.6 64 bit, Pywin32 64 bit, msjet40.dll 64 bit da im System im Verzeichnis c:/windows/SysWOW64 vorgefunden, aus der Fehlermeldung müsste man auf eine Registrierung schließen, in diesem Bereich habe bisher aber nichts gemacht.

ODBC müsste wieder extra (?) eingerichtet werden, das ganze läuft auf einer transportablen Platte und sollte eben mit unterschiedlichen Systemen (Windows) arbeiten können.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nee, das ist IMHO fest an Bord (genau so wie bei SQL Server). So behauptet es auch Wikipedia

Der Vorteil von ODBC ist, dass es konform mit der Python DB API ist, d.h. wenn du ggf. mal z.B. auf SQL Server oder SQLite oder ... umsteigst musst du nur eine Zeile ändern. :-)

Gruß, noisefloor
Antworten