Adriana_0_0
Adriana_0_0

Reputation: 85

Connect to MS Access in Python

I tried a lot of examples from internet to include a MS Access connection to my python project without sucess

I have my python project in Eclipse with Anaconda, and my code is:

import win32com.client
import pyodbc

def ado():
 '''
  connect with com dispatch objs
  '''
  conn = win32com.client.Dispatch(r'ADODB.Connection')
  DSN = ('PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = ' + db +  ';')
  conn.Open(DSN)

  rs = win32com.client.Dispatch(r'ADODB.Recordset')
  strsql = "select * from Empresas"
  rs.Open(strsql, conn, 1, 3)
  t = rs.GetRows()
  conn.Close()
  return t

def odbc():
  '''
  connects with odbc
  '''        
  constr = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=' + db
  conn = pyodbc.connect(constr, autocommit=True)
  cur = conn.cursor()
  strsql = "select * from Empresas"
  cur.execute(strsql)
  t = list(cur)
 conn.close()
 return t

 if __name__ == '__main__':

  db = 'D:/EMP001/2018/example.mdb'
  data1 = ado()
  data2 = odbc()

With data1 I get the following message:

pywintypes.com_error: (-2147352567, 'Ocurrió una excepción.', (0, 'ADODB.Connection', 'No se encontró el proveedor especificado. Es posible que no esté instalado correctamente.', 'C:\WINDOWS\HELP\ADO270.CHM', 1240655, -2146824582), None)

And with data2 this one:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado (0) (SQLDriverConnect)')

Any ideas?

Upvotes: 2

Views: 9114

Answers (2)

ASH
ASH

Reputation: 20302

You probably have 32-bit Access (Office) and 64-bit Python. As you know, 32-bit and 64-bit are completely incompatible. You need to install 32-bit Python, or upgrade Access (Office) to 64-bit, and then it will work. Succinctly put, you cannot connect (at application level) a 64-bit Python.exe to a 32-bit MS Access ODBC driver (odbcad32.exe) since data is stored and processed differently between the types. However with backwards compatibility, it is advised to work in lowest common denominator as a 64-bit OS can run 32-bit applications and same level programs can "talk" to each other. Please take a look at the URL below for all details.

https://datatofish.com/how-to-connect-python-to-ms-access-database-using-pyodbc/

Upvotes: 2

DFE
DFE

Reputation: 136

In both cases, the error message says it cannot find the driver (ODBC) or the provider (ADO).

In ODBC, are you sure that this driver is installed?

You can have a list of available drivers using pyodbc.drivers()

for example, in my case, I read MS Access data using this driver Microsoft Access Driver (*.mdb)

Upvotes: 0

Related Questions