无法使用ADOBDAPI打开MS ACESS数据库

时间:2019-07-17 13:00:41

标签: python ms-access-2010 adodbapi

当我尝试使用Python ADODBAPI库连接到MS-Access数据库时,出现错误消息。

我尝试使用Microsoft.ACE.OLEDB.12.0提供程序,但这是同一回事。 我可以在同一台计算机上使用Microsoft.Jet.OLEDB.4.0提供程序在C#中打开数据库。

# -*- coding:Utf-8 -*-

import sys
import adodbapi
import argparse

__version__ = 1.0
debugmode = False

# Constantes de connection sur la base de donnees.

MDB = 'D:\lp_2012_3.mdb'
DRV = 'Microsoft.Jet.OLEDB.4.0'
PWD = ''
conn_string = r'Provider=%s; Data Source=%s' % (DRV,MDB)

def main():

    #Connection a la base de donnees.
    print('%s'%conn_string)
    conn = adodbapi.connect(conn_string)
    conn.autocommit = False
    cur = conn.cursor()

    #Definition de la requete
    SQLselect = 'SELECT TOP 10 * FROM PERSONNE;'
    # Lancement de la requete 
    record = cur.execute(SQLselect).fetchall()
    #print('%s'%(type(cur.description)))
    #Get columns name
    entete = []
    for fld in cur.columns('PERSONNE'):
        entete.append(fld.column_name)
        #print(fld.table_name, fld.column_name)
    #print('%s'%(entete))

    cur.close()
    conn.close()

if (__name__ == '__main__'):
    #Recupere les arguments transmis
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action = 'store_true', help = 'augmente la verbosité')
    parser.add_argument('-l', '--log', action = 'store_true', help = 'active le mode log')
    parser.add_argument('-d', '--debug', action='store_true', help='debug mode')
    args = parser.parse_args()
    #applique la configuration
    if args.debug:
        debugmode = True
    sys.exit(main())

我有以下错误代码:

  

adodbapi.apibase.OperationalError:(InterfaceError(“ Windows COM错误:> Dispatch('ADODB.Connection')失败。”),打开与“ Provider = Microsoft.Jet.OLEDB.4.0; = D:\ lp_2012_3.mdb“')

感谢您的帮助。

PS:有些人仍在使用MS-ACCESS。

1 个答案:

答案 0 :(得分:0)

如果可以使用其他模块...

在将两者都用于最近的项目之后,与adodbapi模块相比,我发现pyodbc模块的问题要少得多。 pyodbc目前仍在维护中(与adodbapi不同,我被告知),并且有很多更好的文档。

如果您需要执行参数化查询,请确保使用版本4.0.27或更高版本,如此处https://github.com/mkleehammer/pyodbc/issues/509所述。

我已成功使用64位ACE驱动程序(一旦正确安装)成功连接到MS Access 2016,如下所示:

connectionString = (
    f'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={database_path};'
)
connection = odbc.connect(connectionString, autocommit = True)

双括号用于在驱动程序名称周围转义所需的括号。