10.9 自动注册DSN和创建表

理解ODBC:DSN、ODBC管理器、驱动程序 ODBC Open Database Connectivity(开放数据库互连,维基百科)提供了一种标准的API方法来访问数据库管理系统(DBMS)。 这些API利用SQL来完成大部分任务。 微软于1992.9发表,为解决异构数据库间的数据共享而产生。 WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分(百度百科)。... 阅读详情

10.9 自动注册DSN和创建表

在开始编写自己的数据库应用程序时,读者很快会遇到两个令人头痛的问题。一是在访问ODBC数据源前,必须在ODBC管理器中手工注册DSN(数据源名)。这样的应用程序要求用户作额外的工作,显得很不专业。另一个问题是AppWizard和ClassWizard并不支持表的创建,程序员似乎必须先用DBMS创建好表,然后才能使用。如果一个数据库应用程序不能自己创建表,那么它的功能将大打折扣。

事实上,通过一些技巧,可以使应用程序能够对用户透明地注册DSN并任意创建表。本节的目的就是教会读者如何解决这两个问题。在下面几个小节中,分别提供了ODBC和DAO的解决方案。

10.9.1 自动注册DSN

无论是用ODBC还是DAO类,在访问ODBC数据源以前,都必须先注册DSN。通过调用函数SQLConfigDataSource,可以实现自动注册DSN。当然,用DAO可以直接访问一些常用的数据库,而不必通过ODBC来访问(参见10.8.3)。

清单10.14的代码演示了注册DSN的过程。该段代码先用SQLConfigDataSource注册一个名为MYDB的FoxPro 2.5数据源,然后调用CDatabase::Open函数与该数据源连接。注意在使用这段代码时,要包含afxdb.h头文件,读者可以把该文件放到stdafx.h中。

 

清单

10.14 自动注册DSN

#include

“afxdb.h”

. . .

CDatabase db;

if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft FoxPro Driver (*.dbf)",

"DSN=MYDB/0"

"DefaultDir=c://mydir/0"

"FIL=FoxPro 2.5/0"

"DriverId=280/0"))

{

AfxMessageBox("Can't add DSN!");

return ;

}

TRY

{

db.Open("MYDB");

}

CATCH(CDBException, e)

{

AfxMessageBox(e->m_strError);

return;

}

END_CATCH

 

在注册DSN时,SQLConfigDataSource函数的第二个参数应该是ODBC_ADD_DSN,第三个参数指定了ODBC驱动程序,它的写法可以参照ODBC管理器的驱动程序页。第四个参数说明了数据源的各种属性,它是由一系列子串构成,每个子串的末尾必须有一个“/0”。最重要的属性是“DSN=数据源名”,其它属性包括缺省目录以及驱动程序版本信息。在上例中,使用FoxPro 2.5的版本,所以DriverId应该是280,对应地,FoxPro 2.6的DriverId是536,FoxPro 2.0的是24。

如果读者对SQLConfigDataSource函数的第四个参数的设置方法不清楚,那么可以打开Windows的注册表看一看已注册过的DSN的各项属性。运行RegEdit可以打开注册表,然后依次打开HKEY_CURRENT_USER->Software->ODBC->ODBC.INI,就可以看到已注册的DSN,打开各DSN,则可以看到该DSN的各项属性,读者可以仿照DSN属性来设置第四个参数。

DSN

的名字必须唯一,因此如果要注册的DSN已被注册过,那么SQLConfigDataSource就修改原来DSN的属性。

 

10.9.2 用ODBC创建表

由于ODBC类不支持DDL,所以只有通过ODBC API来创建表。程序需要调用Cdatabase :: ExecuteSQL来直接执行SQL语句。

清单10.15给出了创建表的一个例子,该程序先自动注册了一个名为MYDB的FoxPro 2.5数据源,然后创建了一个名为OFFICES的表(OFFICES.DBF文件),在这个表中有OfficeID和OfficeName两个TEXT型字段,长度分别为4和10个字节。注意,如果要使用这段代码,则需要包含afxdb.h和odbcinst.h。

 

清单

10.15 ODBC创建表的例子

#include

“afxdb.h”

#include "odbcinst.h"

. . .

CDatabase db;

if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft FoxPro Driver (*.dbf)",

"DSN=MYDB/0"

"DefaultDir=c://mydir/0"

"FIL=FoxPro 2.5/0"

"DriverId=280/0"))

{

AfxMessageBox("Can't add DSN!");

return ;

}

TRY

{

db.Open("MYDB");

db.ExecuteSQL("CREATE TABLE OFFICES (OfficeID TEXT(4)"

",OfficeName TEXT(10))"); }

CATCH(CDBException, e)

{

AfxMessageBox(e->m_strError);

return;

}

END_CATCH

 

 

ExecuteSQL

执行了一个实实在在的SQL语句CREATE来创建表,看来用户应该找本SQL方面的书研究研究。要注意一个数据库中的表名必须是唯一的,如果要创建的表已经存在,则ExecuteSQL会产生一个异常。

10.9.3 用DAO创建表

由于DAO类直接支持DDL,所以用DAO类创建表比ODBC容易。DAO的CDaoTableDef类提供了对表的结构的定义,该类提供了创建表的成员函数。

清单10.16演示了一段用DAO类创建表的例子。注意,若要使用这段代码,则应该包含afxdao.h头文件。在该例中,先与一个FoxPro 2.5数据库连接(实际上是一个目录),然后再构建一个CDaoTableDef对象,接着调用CDaoTableDef :: Create函数创建一个名为STUDENTS的表(STUDENTS.DBF),调用CDaoTableDef :: CreateField为该表创建了两字段,字段名分别是ID和NAME,类型分别是Integer和dbText,字段的长度分别为2和10个字节。最后调用CDaoTableDef :: Append把新创建的表保存到数据库中。

清单

10.16 DAO创建表的例子

#include

“afxdao.h”

. . .

CDaoDatabase daoDb;

try

{

daoDb.Open("",FALSE,FALSE,"FoxPro 2.5;DATABASE=d://zwin");

CDaoTableDef table(&daoDb);

table.Create("STUDENTS");

table.CreateField("ID",dbInteger,2);

table.CreateField("NAME",dbText,10);

table.Append();

}

catch(CDaoException* e)

{

AfxMessageBox(e->

m_pErrorInfo->m_strDescription);

e->Delete();

return FALSE;

}

关于CDaoDatabase :: Open的说明请参见10.8.3。注意一个数据库中的表名必须是唯一的,如果要创建的表已经存在,则CDaoTableDef :: Create会产生一个异常。
PB9.0连接ODBC数据源及自动注册的实战应用 本文介绍了PB9.0连接SQLServer2019数据库ODBC数据源及自动注册的实战应用方案。针对医院信息化系统中手动配置ODBC数据源存在的效率低、易出错等问题,提出通过PB9.0脚本编程调用Windows API实现自动注册的方法。详细阐述了核心原理、实现步骤、脚本代码及优化建议,包括驱动安装、注册表操作、连接验证等关键环节,并提供了适配医院药房追溯码系统等高并发场景的优化方案。该方案可显著提升系统部署效率和运维稳定性,为医院PB类系统开发提供可直接复用的技术参考。 阅读详情

相关推荐

别再为LabVIEW连不上Access发愁了!Win10下32位ODBC驱动安装与DSN配置保姆级教程

本文详细介绍了在Windows 10系统下如何安装32位ODBC驱动并配置DSN,解决LabVIEW连接Access数据库的常见问题。从驱动安装、DSN配置到LabVIEW编程实践,提供全面的解决方案和优化技巧,帮助开发者高效完成数据采集与管理任务。

dida4700的博客 407

WINDOWS 64位机ODBC的数据源DSN添加和移除问题

WINDOWS 64位机ODBC的数据源DSN添加和移除问题 WINDOWS 64位机器上ODBC的操作方法与32位机器是不一样的,如果直接从控制面板上-管理员工具-ODBC进去,就会发现User DSN以及System DSN里面都为空,找不到ODBC Driver,无法进行ODBC的数据源DSN添加和移除,正确的处理方法如下所示。 (1)ODBC的数据源DSN添加 直接从

WorldMvp的专栏 2万+

手把手教你配置Adaptive Server Anywhere 9.0的ODBC数据源(含注册表导入指南)

本文详细介绍了如何配置Adaptive Server Anywhere 9.0的ODBC数据源,包括驱动部署、注册表编辑和实战配置步骤。特别针对老旧系统迁移场景,提供了注册表导入指南和常见错误解决方案,帮助技术人员高效完成数据库连接配置。

weixin_30872157的博客 470

ODBC管理器中用户DSN,系统DSN,文件DSN的含义及用法

ODBC(Open Database Connectivity)DSN(Data Source Name)“ODBC数据源管理器”提供了三种DSN,分别为用户DSN、系统DSN和文件DSN。1. 用户DSN会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。2.系统DSN同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允

5972

用odbc类创建Oracle数据库表

一个使用odbc类来创建oracle数据库的用户及其权限,数据表的小代码

[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列

对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。

weixin_55035144的博客 1428

几种注册 ODBC数据源的方法

几种注册 ODBC数据源的方法 国防科大 丁 浩 ODBC(Open Database Connectivity,开放式数据库互连)是一种应用程序接口 (API) 规范。它定义了一个标准例程集,使用它们应用程序可访问数据源中的数据。应用程序通过引用 API 的函数可以直接使用 ODBC,或利用数据访问对象 (DAO) 或远程数据对象 (RDO) 来使用ODBC。但是,在

stanely的专栏 3558

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月10日

前文:SABRE 3D系列机台简介本章节详细阐述了在维护期间锁定电气、机械、热力学及重力组件以及化学管线输入的锁定操作流程,旨在降低人员受伤风险。p42~p55。

weixin_46735260的博客 1616

window10 ODBC数据源管理程序添加系统DSN不显示

window10 ODBC数据源管理程序添加系统DSN不显示

笑对人生 4355

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 303

LayaNative源码编译

修改好后的LayaNative2.0需要重新编译生成Android和iOS所需要的动态库文件。

末之 1360

DNS在注册表中位置

1:运行输入"regedit" 2:依次展开HKEY_CURRENT_USER→Software→Microsoft→Office→16.0 3:删除对应的程序文件夹,比如说word就删除word,excel就删除excel 本文转自 运维小学生 51CTO博客,原文链接:http://blog.51cto.com/yasar/1951353,如需转...

weixin_34088598的博客 1196

TNS-12516及ORA-12516错误解决

在客户端进行sqlplus连接报错如下: ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 在/home/oracle/product/10.2.0/db_1/network/log/listener.log中查看到错误如下: TNS-12516: TNS:listener could not find available handler with matchin

KEL 2万+

自动注册DSN和创建表

  电脑报Visual C++网络教程

龙之吻的专栏 849

西门子1200之PID用法与控制

西门子PID加热试验

gyxgyx789的博客 6259

一篇文章带你搞定数学建模里的主成分分析(05年水质问题示例应用讲解含代码)

文章目录一、题目分析二、原理公式三、MATLAB实现某一地区的主成分分析四、MATLAB 实现所有地区28个月的综合分析五、注意 一、题目分析 对长江近两年多的水质情况做出定量的综合评价,并分析各地区水质的污染状况 考虑到各指标之间可能存在一定的相关性,选用主成分分析法对长江流域主要城市水质检测报告进行分析,选取主成分,并把主成分得分按照方差贡献率加权求和,得到每个地区的污染综合评价指数,进而可以计算每个月长江流域的污染综合评价指数,对平均综合评价指数进行排序 二、原理公式 根据主成分分析的方法,分析长江沿

南淮北安的博客 2625

mysql 自动注册 ODBC

一、如何自动注册ODBC数据源 其实都是用到一个函数:SQLConfigDataSource。 这里举两个有代表性的例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 // 自动注册FoxPro数据源 BOOL bOBDC

king'ker 锋 2126

Dify之八添加各种在线大模型

Dify之八添加各种在线大模型

yilvyangguang520的博客 941

GBASE南大通用数据库在Windows和Linux中创建数据源

它的 优点是:(a)它对任何类型的计算机都是可用的,不是对带 Windows 操作系统 的计算机而言;或者它可能是一个“系统数 据源”,在这种情况,计算机上的所有用户或所有连接到计算机的用户都能访问。当用户运行 ODBC 数据源管理器时,用户可以选择是使用“用户数据源”还是“系 统数据源”。当用户连接它时,用户输入的用户名和连接字符串变成了这个数据源缺省 的连接值。8) 在服务器名称框,输入用户要访问的 GBase 服务器主机的 IP 地址。6) 在数据源名称框中,输入用户想用来访问的数据源名字。

weixin_47390342的博客 1505

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

(一)附加数据库与配置dsn文件

9.1号刚刚看完了sql 视频,然后进入了新的学期,昨天开始进行机房收费系统 解压文件: 附加数据库: 数据库右击,附加,查找目录,添加   无论是sql验证还是windows验证登录都出现了相同的问题   网上搜了问题,要求把mdf和ldf文件放在data文件夹下 我的文件目录:C:\Program Files\Microsoft SQL Server\

卓尔游侠 1925

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

自动安装并配置ODBC的思路与实现(自动创建MysqlDSN )

一、如何自动注册ODBC数据源 其实都是用到一个函数:SQLConfigDataSource。 这里举两个有代表性的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 // 自动注册FoxPro数据源 BOOL bOBDC = SQLConf

记事本 5776

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

oracle10g client安装

tag:oracle10g客户端,oracle 9i卸载,测试     oracle9i的卸载务必要彻底:1.停止所有Oracle服务:在控制面板 -> 管理工具 -> 服务 -> 停止所有 oracle 服务 2.卸载程序:在开始菜单选择oracle的 Universal Installer选项 卸载所有oracle 产品 3.清除注册表信息:运行 regedit,进入注册表编辑 1

独孤求静 5403

用SQLConfigDataSource设置odbc

10.9.1   自动注册DSN           无论是用ODBC还是DAO类,在访问ODBC数据源以前,都必须先注册DSN。通过调用函数SQLConfigDataSource,可以实现自动注册DSN。当然,用DAO可以直接访问一些常用的数据库,而不必通过ODBC来访问(参见10.8.3)。           清单10.14的代码演示了注册DSN的过程。该段代码先用SQLCo

ljx0305的专栏 4334

MSSQL2008、2005数据库导入或从导出mysql和相互转换

SQL Server可以从低版本备份还原到高版本,但从高版本会出问题要用专门的工具,备份时要删除默认的位置否则选位置时会有两个备份位置, 用sql脚本在SQL Server和mysql相互导数据会出错最后只有空表,请使用下面的专门工具可以成功导出和导入数据 SQL Server 迁移数据到MySQL 一、背景 由于项目开始时候使用的数据库是SQL Server2008,后来把存储的数据库调整为My...

b66051612的博客 765

几种注册ODBC数据源的方法

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 967
上一篇: 08 DAO
下一篇: DAO and MFC
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值