zoukankan      html  css  js  c++  java
  • 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管理器下是否能找到驱动,若能找到注册数据源后能否成功实现链接,这两个问题由于我没有测试,所以现在还不能确定。
  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/marcworld/p/3412230.html
Copyright © 2011-2022 走看看