QQ登录

只需一步,快速开始

上位机程序动态创建ODBC数据源

[ 复制链接 ]
ODBC(Open Database Conectivity开放式数据库互联),其工作依赖于数据库制造商提供的驱动程序.
使用ODBC API的时候,首先要配置数据源.
Windows的ODBC管理程序,把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句指示DBMS(数据库管理系统)完成数据库访问工作。
一般,数据库到ODBC驱动程序管理器的注册(创建ODBC数据源),有下面两种方法:
一是编程时手工配置ODBC数据源(在系统控制面板找到ODBC程序设置),发布时使用InstallShield等安装制作软件自动配置ODBC数据源;
二是考虑用程序替用户完成这些配置工作,实现的方法有几种,一种办法是用程序修改Windows注册表,用Windows API函数增改HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中的键值,这种方法比较烦琐,另一种是在程序中使用ODBC API的方法,我们可以在任何时候都可以用Visual C++编写的程序调用这些API函数来设置ODBC数据源。

创建ODBC数据源可以调用函数SQLConfigDataSource()实现, 函数定义在动态链接库ODBCCP32.DLL中,该函数可以动态地增加、修改和删除数据源。

SQLConfigDataSource()原型:
BOOL SQLConfigDataSource(HWND hwndParent,
UINT fRequest,
LPCSTR IpszDriver,
LPCSTR IpszAttributes);
其中四个参数的用法如下:
●参数hwndPwent是父级窗口句柄。如果句柄为NULL,将不会显示一些有关的对话框。(参数 IpszAttributes提供的信息不够完善,在创建过程中就会出现对话框要求用户提供相应信息。)
●参数fRequest可以设置为下面的数值之一:
ODBC_ADD_DSN: 增加_个新数据源
ODBC_CONHG_DSN: 配置(修改)一个已经存在的数据源
ODBC_REMOVE_DSN: 删除一个已经存在的数据源
ODBC_ADD_SYS_DSN: 增加一个新的系统数据源
ODBC_CONFIG_SYS_DSN: 更改一个已经存在的系统数据源
ODBC_REMOVE_SYS_DSN: 删除一个已经存在的系统数据源
●参数lpszDriver是数据库引擎名称,可以参见ODBC管理器中对ODBC驱动程序的描述。比如要加载的是Excel数据库,那么数据库引擎名称就为Microsoft Excel Driver(*.xls)
mdb数据库引擎名称为Microsoft Access Driver(*.mdb)

动态创建

动态创建

●参数lpszAttributes为一连串的"KeyName=value"字符串,每两个KeyName值之间用\0""字符隔开(或者\0隔开即可)。
KeyName主要是新数据源缺省的驱动程序注册说明,
其中最主要的关键字是"DSN"(新数据源的名称)和"DBQ"(数据源的地址),
其余关键字则根据不同的数据源有不同要求。关于lpszAttributes参数的具体设置,可以MSDN手册查阅ConfigDSN,获取更多介绍

具体可参阅例程关键代码。例程中文件test.mdb为手工创建

使用SqlConfigDataSource函数之前,须包含头文件
#include <afxdb.h>//数据库支持头文件
#include <odbcinst.h>//SQLConfigDataSource()函数头文件


关键代码为:
  1. void CMy123View::OnButton1()
  2. {
  3.         if(m_pRecordSet)
  4.                 return;
  5.         char cPath[MAX_PATH]="";
  6.         GetModuleFileName(NULL,cPath,MAX_PATH);
  7.         CString sAttri(cPath);
  8.         sAttri = sAttri.Left(sAttri.ReverseFind('\\'));
  9.         strcpy(cPath,sAttri);
  10.         sAttri.Format("DBQ=%s\\test.mdb|",cPath);
  11.         strcpy(cPath,"DSN=Students|");
  12.         strcat(cPath,sAttri);
  13.         strcat(cPath,"Description=工控编程吧gkbc8.com测试用");       
  14.         int len = strlen(cPath);
  15.         for(int i=0;i<len;i++)
  16.         {
  17.                 if(cPath[i] == '|')
  18.                         cPath[i]='\0';
  19.         }
  20.         if(!SQLConfigDataSource(NULL, ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)",cPath ) )
  21.         {
  22.                 AfxMessageBox("创建数据源失败!!");
  23.                 return;
  24.         }
  25.         if(!m_Database.OpenEx("DSN=Students",0) )
  26.         {
  27.                 AfxMessageBox("打开数据源失败!!");
  28.                 return;
  29.         }
  30.         TRY
  31.         {
  32.                 m_Database.ExecuteSQL("CREATE TABLE VIPList (ID INTEGER,Name VARCHAR(10),PhoneNO INTEGER)");
  33.         }       
  34.         CATCH(CDBException, e)
  35.         {
  36.                 AfxMessageBox("创建数据表失败!!");
  37.                 return;
  38.         }       
  39.         END_CATCH
  40.         m_pRecordSet = new CRecordset(&m_Database);
  41. }
复制代码


MFC上数据库有四种编程方法,下面引用 网络段落:

ODBC(Open Database Connectivity,开放数据库互连)
1992年,微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。---出现的最早,但不总是万能。

DAO(Data Access Object,数据访问对象)
1993年,微软公司用来显露了Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或在小范围本地分布使用。其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式---应用的专一性

RDO(Remote Data Objects,远程数据对象)
1995年,RDO是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DAO style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。---无疑是在odbc基础上的

OLE DB(Object Linking and Embedding, Database,对象连接嵌入数据库)
1997年, Microsoft 的一个战略性系统级编程接口,用于管理整个组织内的数据。OLE DB 是建立在 ODBC 功能之上的一个开放规范。ODBC 是为访问关系型数据库而专门开发的,OLE DB 则用于访问关系型和非关系型信息源,例如主机 ISAM/VSAM 和层次数据库,电子邮件和文件系统存储,文本、图形和地理数据以及自定义业务对象。
OLE DB 定义了一组 COM 接口,对各种数据库管理系统服务进行封装,并允许创建软件组件,实现这些服务。OLE DB 组件包括数据提供程序(包含和表现数据)、数据使用者(使用数据)和服务组件(处理和传送数据,例如,查询处理器和游标引擎)。
OLE DB 接口有助于平滑地集成组件,这样,OLE DB 组件厂商就可以快速地向市场提供高质量 OLE DB 组件。此外,OLE DB 包含了一个连接 ODBC 的“桥梁”,对现用的各种 ODBC 关系型数据库驱动程序提供一贯的支持。---号称取代odbc,但也兼容odbc

ADO(ActiveX Data Object,活动数据对象)
1996年,ADO是DAO/RDO的后继产物。ADO 2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO"扩展"了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。 作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流。
ADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE DB三种方式。

例程代码中附上<ADO编程技术>


百度云附件:上位机程序动态创建ODBC数据源.rar   
  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索