我可以使用32位的ODBC驱动程序来运行64位应用程序吗?

3
我有一个Win32应用程序,用于进行ODBC连接。我们使用SQLDriverConnect()进行连接,该函数会显示一个对话框来选择数据源。在x64版本中,该对话框显示并提供了两个不同的32位MS ACCESS驱动程序。当我选择其中一个时,在32位版本中,我会看到一个打开文件对话框来选择.mdb文件。但是在64位版本中,此时对SQLDriverConnect()的调用返回-1。 SQLError()返回错误信息:"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"。
总的来说,能否从64位可执行文件中使用32位ODBC驱动程序?为什么会显示这些驱动程序?据我所知,目前还没有64位MS Access OBDC驱动程序,那我该怎么办呢?
4个回答

6

您绝对不能混合使用32位应用程序和64位驱动程序(反之亦然)。

基本上,ODBC驱动程序通常是一个dll文件(Windows)或共享对象文件(Linux...),由其父应用程序加载。

所有共享同一进程空间的可执行文件、dll等必须具有相同的位数特征(即都是32位或者都是64位)……


谢谢你的清晰回答。我不确定ODBC是否使用COM或不同的接口。但是,为什么当我从64位应用程序调用ODBC驱动程序管理器时,这些驱动程序会被列出呢? - RED SOFT ADAIR
@REDSOFTADAIR 这与注册表条目有关。微软的描述在这里:http://support.microsoft.com/kb/942976 - jvangeld

2
为了从64位应用程序接入32位ODBC驱动程序,您需要使用一个ODBC到ODBC桥接器,比如:

http://uda.openlinksw.com/odbc-odbc-mt/

这是一个64位的ODBC客户端组件,通过套接字连接到32位的服务器组件。服务器组件桥接到预配置的32位Access ODBC DSN。
客户端组件可以在本地机器或服务器上。

0

64位的Office或MS Access 2010安装程序确实包含64位的MS Access ODBC驱动程序,尽管它似乎不是64位Windows操作系统中随附的64位MDAC的一部分,但我想这可能会在以后的更新中改变。就在上周,我安装了64位的MS Access,然后使我能够将MS Access表链接到我在Windows上的64位Virtuoso Server - hwilliams
@hwilliams:谢谢你提供那个有趣的信息,看来我找到的那篇博客文章有点过时了。 - Doc Brown

-2

你不能这样做,但是你可以选择在32位下编译你的应用程序,并使用32位ODBC驱动程序。在我的情况下,我使用GoLang只需更改GOARCH环境变量SET GOARCH=386然后编译你的项目go build,就可以了。


1
没有回答这个问题: "我能在64位应用程序中使用32位ODBC驱动程序吗?" - RED SOFT ADAIR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接