你好,再次社区,
我正在寻找32位..mdb与我的64位环境冲突的解决方案: 64位Windows 7,64位MS数据库驱动程序运行64位python。我希望将这些..mdb中的数据写入64位PostgreSQL数据库,并可能还将其写入.csv文件。然而,我希望这个工具不仅能在我的机器上工作,而且能在同事的机器上工作,这样它最好也能处理其他环境。
最初,我用32位版本的MS数据库驱动程序和python编写了一个.csv脚本。然而,我想要创建一个QGIS插件,这也是我在64位,我不想改变所有的32位,只是为了能够读取偶然的32位.mdb文件。
我对编码完全陌生,但我已经阅读了这个问题,并了解到在32位数据库与64位脚本和驱动程序之间建立直接连接基本上是不可能的。尽管如此,我仍然很难相信这个问题没有解决办法。网络应用程序不定期处理这种情况吗?例如,是否可以使用Django创建这种功能?还是使用一个昂贵的司机声称支持32位和64位都是一个解决方案?创建一个独立的工具会更容易吗?或者这样的工具已经存在了,只是我还没有找到呢?
因此,总结一下:我希望将数据从32位.mdb写入64位PostgreSQL数据库,最好是用QGIS编写。
我以前使用过的初始代码是:
import csv, pyodbc
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw()
filename = askopenfilename()filenameEdit = filename.replace(":/", "://")
print(filename)
print(filenameEdit)
MDB = filename
DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
DBQ = filename
PWD = 'pw'
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()
SQL = 'SELECT * FROM strips' # This query would need to be expanded
rows = cur.execute(SQL).fetchall()
cur.close()
con.close()
mytable = input("Save file as: ")
def writeCSV():
with open((mytable+'.csv'), 'w') as newDB:
csv_writer = csv.writer(newDB, lineterminator='\n')
for row in rows:
csv_writer.writerow(row)
writeCSV()
# Another function should be added to write to a PostreSQL database
这给现在运行64位的错误是:
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open a database created with a previous version of your application. (-1019); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x2820 Thread 0x2758 DBC 0x65626f8
Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Cannot open a database created with a previous version of your application. (-1019)")`
任何想法都会非常感谢,非常感谢!
发布于 2020-06-16 14:08:02
Access数据库文件( .mdb,.accdb)不是特定于体系结构的;没有“32位.mdb文件”或“64位.accdb文件”这样的东西。Access数据库引擎有32位版本和64位版本(以及驱动程序等)。但它们生成的数据库文件是相同的。
你收到的是
无法打开用应用程序的以前版本创建的数据库。
错误,因为Access数据库引擎的版本不再支持要使用的数据库文件的版本(而不是"bitness")。如果您正在为Access_2013或更高版本使用Access数据库引擎,那么您的文件格式必须为Access_97或更高版本。如果您使用的是来自Access_2010的Access数据库引擎,那么您尝试使用的文件的格式是超级旧的(可能是Access_2.0)。
正如您似乎已经注意到的那样,我们仍然可以使用Windows (Microsoft Access Driver (*.mdb)
)附带的遗留的"Jet“数据库引擎来处理旧的数据库文件,但是它是32位驱动程序,没有64位版本。
https://stackoverflow.com/questions/48539500
复制相似问题