简体   繁体   中英

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?

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/

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM