• win8_64bit系统下利用ODBC连接自建数据源时的问题与解决


    背景:

    由于用Labwindows/CVI做上位机开发的时候要用到访问数据库的功能,而CVI自带的SQL Toolkit Library提供的方法是基于ODBC的,所以尝试为其配置ODBC来访问Access数据库

    平台:

      Labwindows/CVI 2010,应该是32位版的

      win8 64bit 企业版

      Microsoft Access 2013(64位)

    我的步骤:

    1.建立数据源。利用Access自建一个数据源(table),保存为“.mdb”格式;

    2.代码实现连接并访问数据源。利用CVI的SQL Toolkit Library提供的标准方法来完成,即依次调用DBConnect()->DBBeginMap()->DBMapColumnTo*()->Feching function...(各函数的参数省略,*代表若干可选项),具体实现可参考CVI的SQL Toolkit Help文档;

    3.在操作系统中注册数据源。由于Windows采用ODBC的方式为应用程序提供统一的数据库访问接口,屏蔽不同数据库之间的差异,因此在使用基于某一种数据库创建的数据源之前,必须在ODBC数据源管理器中进行注册(即添加)。

    问题与解决过程:

    主要问题出现在第三步中,下面开始详细讨论。

    首先在win8的搜索框中输入“ODBC”,打开ODBC数据源管理器(ODBC Data Source Administrator),这里要注意,以这种方式打开的数据源管理器是64位的(可以看到管理器的标题栏上有个括号里面写着 64位,如下图)。另外说明一下,我的win8一开始安装的是32位的office2010,因此此时在64位的ODBC管理器中找不到“Microsoft Access Driver”(点击“添加”后,列表中没有),因此也就无法注册我们自建的“.mdb”文件。

    (当时在网上搜到可以打开C:WindowsSysWOW64odbcad32.exe这个32位的ODBC管理器完成注册,但我没有尝试,所以无法确定是否可以用32位的ODBC管理器在64位系统中找到32位的数据库驱动)

    接下来我就卸载了32位的office,并安装了64位版的office2013。然后依然打开64位的ODBC管理器,在“系统DSN”选项卡下点击“添加”,终于看到了“Microsoft Access Driver“。

    用该”Microsoft Access Driver“顺利地添加了我自建的Access数据源,如下图所示”CVI mytest“,可以看到该数据源的”平台“一项显示”64位“。
    回到CVI开发环境中编译运行程序,结果出乎意料的又报错了:
    错误提示是”驱动程序与应用程序之间的体系结构不匹配“,分析原因可能是我的CVI是32位的,而我创建的数据源使用的是64位的驱动,因此造成了体系结构不匹配。于是想到了位于C:WindowsSysWOW64odbcad32.exe下的32位ODBC管理器,若在该管理器下为数据源注册32位的驱动或许就可以了。
    打开32位ODBC管理器(注意标题栏显示32位),如下图:
    在“系统DSN”选项卡下点击“添加”,可以看到”Microsoft Access Driver“:
    (比较32位管理器和64位管理器下的Driver,可以发现,它们的版本号和动态链接库都不一样,如下图所示)
    继续完成创建,可以看到我所创建的”CVImydatabase“的”平台“已经变成了32位:
    回到CVI中,将程序链接的数据源改成”CVImydatabase“,运行成功,说明这种方法确实建立上了数据库的链接。
    总结:
    在64位操作系统下编程进行数据库访问时,应用程序与数据库驱动程序的体系结构应该要匹配,若安装的数据库(仅以Access为例)是64位的,则应该在32位的ODBC管理器下注册数据源,这样加载的才是32位的驱动程序。
    若安装的数据库是32位的,在64位的ODBC管理器下是找不到对应的驱动的,在32位的ODBC管理器下是否能找到驱动,若能找到注册数据源后能否成功实现链接,这两个问题由于我没有测试,所以现在还不能确定。
  • 相关阅读:
    git 同步远程分支
    git tag 打标签
    EJS 语法
    从零开始制作 Hexo 主题
    博客灵感
    java编译做了哪些事?
    java+内存分配及变量存储位置的区别[转]
    用android模拟器Genymotion定位元素
    利用securecrt在linux与windows之间传输文件
    eclipse引入tomcat
  • 原文地址:https://www.cnblogs.com/marcworld/p/3412230.html
Copyright © 2020-2023  润新知