2011-06-18 11 views
9

Jestem na Win7 x64, używając Pythona 2.7.1 x64. Przesyłam aplikację stworzoną w VC++ do Pythona dla celów edukacyjnych.
Oryginalna aplikacja nie ma problemu z połączeniem do formatu 2007 pliku DB MS Access stosując następujący ciąg połączenia:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
Teraz, gdy próbuję połączyć się z tego samego pliku DB (umieścić w katalogu C: \ tym razem) w Pythonie przy użyciu pyodbc i następujący ciąg połączenia o:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
i nieważne, czy trzymam dostawcy OLEDB lub używam Provider=MSDASQL; jak wspomniano here (MS mentions it's not availiable for 64bit), wciąż otrzymuję następujący błąd:Podłączanie do bazy danych MS Access 2007 (.accdb) przy użyciu pyodbc

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

Co może powodować ten problem?

DODAJ: Dosłownie przyjrzałem się dokumentom pyodbc i wypróbowałem conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - ten sam błąd. To jest naprawdę dziwne, ponieważ pyodbc.dataSources() pokazuje, że mam tego dostawcę.

ADD2: Próbowałem użycia win32com.client, takich jak here w celu połączenia przy użyciu OLE DB - bez powodzenia. Wydaje się, że to niemożliwe, nic nie działa.

Odpowiedz

13
  1. spróbuje użyć coś jak poniżej zamiast używać ten sam ciąg jako jeden dla OleDB:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. może nie być w stanie rozmawiać z kierowcą bezpośrednio z aplikacji Pythona x64 : Program Access 2007 i sterownik ACE mają tylko 32-bitowe wartości.
    Zamiast tego uzyskaj ACE x64 driver for Access 2010, ale uważaj, jeśli masz już zainstalowany program Access lub 32-bitowy sterownik ACE, to nie będzie działać.
    Będę trzymał się 32-bitowych wersji Pythona i sterownika ACE, jeśli oczekujesz, że Twoja aplikacja będzie działać na innych systemach: nie zaleca się mieszania wersji x64 i x86 narzędzi i sterowników Office, prawdopodobnie skończysz z wieloma problemami, jeśli tak.

  3. Jeśli problem nie dotyczy miksu 32/64-bitowego, to być może this question has the answer you seek.

+0

Dziękuję, będę świadomy problemów z kompatybilnością x64. Jednak dla tej aplikacji postanowiłem ręcznie przenieść DB do SQLite ręcznie i używać go w ten sposób - pomyślałem, że to potencjalnie rozwiąże wiele problemów :) W każdym razie, plik DB jest przeznaczony do edycji tylko przez samą aplikację. – havelock

+0

Edytowałem odpowiedź, aby dodać więcej sugestii. Może problem jest tylko z ciągiem połączenia? Oszczędź ci przepisania. –

+0

Użyłem ciąg połączenia, o którym wspomniałeś na początku, zobacz sekcję "ADD"; utworzenie użytkownika DSN może rozwiązać problem (chociaż nie jestem pewien, czy to pomogłoby, po tym jak wszystkie sterowniki/dostawcy zawiodły) i nadal jestem pewien, że to, o czym wspomniałeś w drugim punkcie, dotyczy przypadku, ponieważ oryginalna aplikacja VC++ ma 32 bity), ale jak już wspomniałem, rozwiązałem problem w bardziej drastyczny sposób. – havelock

Powiązane problemy