2011-06-18 45 views
9

Tôi đang sử dụng Win7 x64, sử dụng Python 2.7.1 x64. Tôi đang chuyển một ứng dụng mà tôi đã tạo trong VC++ sang Python cho các nhà giáo dục.
Các ứng dụng ban đầu không có vấn đề kết nối với MS Access 2007 định dạng tập tin DB bằng cách sử dụng chuỗi kết nối sau:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
Bây giờ, khi tôi cố gắng để kết nối với các tập tin DB cùng (đặt trong C: \ thời gian này) bằng Python sử dụng pyodbc và chuỗi conenction sau:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
, và không có vấn đề cho dù tôi giữ nhà cung cấp OLEDB hoặc tôi sử dụng Provider=MSDASQL; như đã đề cập here (MS mentions it's not availiable for 64bit), tôi tiếp tục nhận được lỗi sau:Kết nối với cơ sở dữ liệu MS Access 2007 (.accdb) bằng pyodbc

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

Điều gì có thể gây ra sự cố này?

THÊM: Tôi đã xem xét tài liệu pyodbc chặt chẽ hơn và thử conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - cùng một lỗi. Điều này thực sự kỳ lạ, vì pyodbc.dataSources() cho thấy rằng tôi có nhà cung cấp này.

ADD2: Tôi đã sử dụng win32com.client như here để kết nối bằng OLE DB - không thành công. Có vẻ như không thể, không có gì hiệu quả.

Trả lời

13
  1. Cố gắng sử dụng một cái gì đó như sau thay vì sử dụng các chuỗi tương tự như một cho OLEDB:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. Bạn không thể có khả năng nói chuyện với người lái xe trực tiếp từ ứng dụng Python x64 của bạn : Access 2007 và trình điều khiển ACE của nó chỉ 32 bit.
    Thay vào đó, hãy lấy ACE x64 driver for Access 2010, nhưng hãy cẩn thận nếu bạn đã có quyền truy cập hoặc trình điều khiển ACE 32 bit được cài đặt, nó sẽ không hoạt động.
    Tôi sẽ gắn vào phiên bản 32 bit của Python và trình điều khiển ACE nếu bạn mong đợi ứng dụng của mình chạy trên các hệ thống khác: không nên trộn các phiên bản x64 và x86 của các công cụ và trình điều khiển Office, có thể bạn sẽ kết thúc với rất nhiều vấn đề nếu bạn làm.

  3. Nếu sự cố không có kết hợp 32/64bit, thì có thể this question has the answer you seek.

+0

Cảm ơn bạn, tôi sẽ biết các vấn đề tương thích với x64. Tuy nhiên, đối với ứng dụng này, tôi đã quyết định chỉ để chuyển DB sang SQLite theo cách thủ công và sử dụng nó theo cách đó - tôi nghĩ nó sẽ giải quyết được nhiều vấn đề :) Dù sao, tệp DB chỉ được chỉnh sửa bởi chính ứng dụng. – havelock

+0

Tôi đã chỉnh sửa câu trả lời để thêm các đề xuất khác. Có lẽ vấn đề là chỉ với chuỗi kết nối? Sẽ giúp bạn viết lại. –

+0

Tôi đã sử dụng chuỗi kết nối mà bạn đề cập trong phần đầu, xem phần "ADD"; việc tạo một DSN của người dùng có thể giải quyết vấn đề (mặc dù tôi không thực sự chắc chắn sẽ giúp ích gì, sau khi tất cả các trình điều khiển/nhà cung cấp đã thất bại, và tôi vẫn chắc chắn rằng những gì bạn đã đề cập ở phần 2 là trường hợp, vì ứng dụng VC++ gốc là 32bit), nhưng như tôi đã đề cập, tôi đã giải quyết được vấn đề một cách quyết liệt hơn. – havelock

Các vấn đề liên quan