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.
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
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. –
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