1

M$-Access から SQLite への移行を支援する小さなモジュールを作成しています (データベースは移植可能である必要があります) が、このコードに続くエラー メッセージを解釈するのに苦労しています (もちろん、それを機能させるために) .

import pyodbc
import win32com.client

def ado(db, sqlstring='select * from table', user='admin', password=''):
    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')
    rs.Open(strsql, conn, 1, 3)
    data = rs.GetRows()
    conn.Close()
    return data

def odbc(db, sqlstring='select * from table', user= 'admin', password=''):
    """Create function for connecting to Access databases."""
    odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;UID=%s;PWD=%s' % (db, user, password)
    conn = pyodbc.connect(odbc_conn_str)
    cur = conn.cursor()
    cur.execute(strsql)
    data = list(cur)
    conn.close()
    return data

if __name__ == '__main__': # Unit test       
    db = r'C:\pyodbc_access2007_sample.accdb'
    sql="select * from Customer Orders" ## tables: 'Customer Orders', 'Physical Stoks','Prodplans'
    data1 = ado(db,sql)
    data2 = odbc(db,sql)

ado関数からエラーが発生します:

Traceback (most recent call last):
  File "C:/pyodbc_access2007_example.py", line 27, in <module>
    data1 = ado(db,sql)
  File "C:/pyodbc_access2007_example.py", line 7, in ado
    conn.Open(DSN)
  File "<COMObject ADODB.Connection>", line 3, in Open
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 282, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft JET Database Engine', u"Unrecognized database format 'C:\\pyodbc_access2007_sample.accdb'.", None, 5003049, -2147467259), None)

そしてodbc関数からエラーが発生します:

Traceback (most recent call last):
  File "C:/pyodbc_access2007_example.py", line 28, in <module>
    data2 = odbc(db,sql)
  File "C:/pyodbc_access2007_example.py", line 17, in odbc
    conn = pyodbc.connect(odbc_conn_str)
Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open database '(unknown)'.  It may not be a database that your application recognizes, or the file may be corrupt. (-1028) (SQLDriverConnect); [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x18c0 Thread 0xe70 DBC 0x379fe4 Jet'. (1); [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x18c0 Thread 0xe70 DBC 0x379fe4 Jet'. (1); [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x18c0 Thread 0xe70 DBC 0x379fe4 Jet'. (1); [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x18c0 Thread 0xe70 DBC 0x379fe4 Jet'. (1); [HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open database '(unknown)'.  It may not be a database that your application recognizes, or the file may be corrupt. (-1028)")

これをどう読むかについて何か良いアイデアはありますか?

4

3 に答える 3

0

accdb ファイルにアクセスするには、AccessDatabaseEngine をインストールする必要があります。

また、32 ビットまたは 64 ビットが必要な場合にも注意してください。

于 2014-02-03T11:38:22.950 に答える
0

接続文字列は mdb アクセス ファイルのみを認識します。pyodbc には mdb ファイルと accdb ファイルを実行する接続文字列があります。

于 2013-05-15T14:46:22.047 に答える
0
select * from Customer Orders
----------------------^

そのようなテーブル名にスペースを入れることは、Access で本当に機能しますか? MSSQL Server については、[Customer Orders] のように引用します。

于 2013-05-14T19:45:17.500 に答える