2011-06-18 16 views
9

Estoy en Win7 x64, usando Python 2.7.1 x64. Estoy portando una aplicación que creé en VC++ a Python para propósitos educativos.
La aplicación original tiene ningún problema para conectarse al archivo de base de datos 2007 en formato MS Access mediante la siguiente cadena de conexión:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
Ahora, cuando intento conectar con el mismo archivo de base de datos (poner en C: \ este momento) en Python usando pyodbc y la siguiente cadena conenction:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
, y no importa si me quedo con el proveedor OLEDB o utilizo el Provider=MSDASQL; como se mencionó here (MS mentions it's not availiable for 64bit), me siguen dando el siguiente error:Conexión a la base de datos MS Access 2007 (.accdb) usando pyodbc

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

¿Qué podría causar este problema?

ADD: He examinado los documentos pyodbc más de cerca y he intentado conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - el mismo error. Esto es realmente extraño, ya que pyodbc.dataSources() muestra que tengo este proveedor.

ADD2: Intenté utilizar win32com.client como here para conectarme mediante OLE DB - sin éxito. Parece que es imposible, nada funciona.

Respuesta

13
  1. Trate de usar algo como lo siguiente en lugar de utilizar la misma cadena que el de OLEDB:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. Es posible que no sea capaz de hablar con el conductor directamente desde su aplicación Python x64 : Access 2007 y su controlador ACE son solo de 32 bits.
    En su lugar, obtenga el ACE x64 driver for Access 2010, pero tenga cuidado de que si ya tiene Access o el controlador ACE de 32 bits instalado, no funcionará.
    Me quedaría con las versiones de 32 bits de Python y del controlador ACE si espera que su aplicación se ejecute en otros sistemas: no se recomienda mezclar las versiones x64 y x86 de las herramientas y controladores de Office, probablemente terminará con muchos problemas si lo haces

  3. Si el problema no es con la mezcla 32/64bit, entonces tal vez this question has the answer you seek.

+0

Gracias, estaré enterado de los problemas de compatibilidad x64. Sin embargo, para esta aplicación he decidido simplemente portar DB a SQLite manualmente y usarlo de esa manera, me imaginé que podría resolver muchos problemas :) De todos modos, el archivo DB está destinado a ser editado solo por la propia aplicación. – havelock

+0

Estaba editando la respuesta para agregar más sugerencias. Tal vez el problema es solo con la cadena de conexión? Te salvaría una reescritura. –

+0

He utilizado la cadena de conexión que mencionas al principio, mira la sección "AGREGAR"; crear un usuario DSN podría resolver el problema (aunque no estoy muy seguro de que eso ayude, después de todo, todos los controladores/proveedores han fallado, y aún así estoy bastante seguro de que lo que mencionó en el segundo punto es el caso, ya que la aplicación original de VC++ es de 32 bits), pero como he mencionado, he resuelto el problema de una manera más drástica. – havelock

Cuestiones relacionadas