用VC 6.0研发多表联接的数据库应用程式
2008-02-23 05:29:24来源:互联网 阅读 ()
关键字 数据库 ,多表联接,MFC ODBC
1.引言
研发Windows应用程式时,在很多情况下可能要和数据库连接。数据库类型多种多样,功能结构也各不相同。从比较简单的DBASE、FoxPro等到复杂的SYBASE、Qracle等大型数据库系统。VC 6.0都提供了一些接口。程式员可利用这些接口方便地研发数据库应用程式。MFC ODBC类就是其中的一个,在快速生成简单一致的接口应用程式方面这些类很有用。用户不必了解ODBC API和SQL的具体细节,利用ODBC类即可完成对数据库的大部分操作。然而,VC Appwizard 生成的数据库应用程式,只是基于单个数据表的数据库应用程式。而实际应用中,往往需要数据库应用程式能关联二个或多个数据表。VC 的好多书籍对此只是简单的介绍。本文透彻地解决这一问题。
2.ODBC和MFC
2.1 ODBC
ODBC(开放数据库互连)应用程式可通过ODBCAPI访问不同数据源中的数据,每个不同的数据源类型由一个ODBC驱动程式支持,这个驱动程式完成了ODBC API程式的核心,并和具体的数据库通信。ODBC环境提供了驱动程式管理器(Driver Manager),管理那些和不同数据源连接的驱动程式在ODBC32.DLL中执行。应用程式只需要和驱动程式管理器连接,驱动程式管理器就会根据应用程式提供的数据源名,选择正确的驱动程式来访问数据源。
要使用ODBC来研发数据库应用程式,必须使用在控制面板处的ODBC数据源管理器,来建立、配制数据源。应本例应用程式需要,按以下步骤建立所需的数据源。
1. 双击控制面板处的32位的ODBC程式,选择对话框中的User DSN(用户数据源名)选项卡。
2. 单击Add按钮,然后选择一个数据源:Microsoft Visual FoxPro Driver。单击“完成”,进入下一步配置。
3. 在Data Source Name域内输入数据源名:DB-FSB。然后选择Visual FoxPro数据库的位置。
4. 单击OK按钮,返回到控制面板。
2.2 MFC ODBC
MFC的数据库扩展部分封装了使用ODBC数据资源的细节,提供了VC 和ODBC间一种简单的调用接口。MFC的ODBC类主要包括:用来和一个数据源相连的CDatabase类;用来处理从数据库返回的一组记录集的CRecordset类;简化从Crecordset对象中得到数据的显示的CRecordView类。
虽然Cdatabase类允许您对一个数据库执行SQL语句,但是CRecordset类提供了应用程式和数据交互的实质。本例应用程式使用CRecordset类来操作数据源.
CRecordset类的主要目的是让应用程式访问从数据库中返回的结果集。在应用程式中要使用CRecordset类,可根据数据源并使用VC 中的ClassWizard来创建Crecordset派生类。通常,一个CRecordset派生类对应用户数据源中的一个表。每生成一个Crecordset派生类,就要选择一个数据源和一个数据源中的一个表。若生成一个Crecordset派生类时,选择了一个数据源中的多个表,那么Crecordset派生类中的结果集是多个表的卡氏积(迪卡尔积)连接,显然,在实际应用中没什么意义。应用程式通过派生出的Crecordset类可对记录集中的记录进行滚动、修改、增加和删除等操作。
CRecordView类具备几个增强功能,允许使用对话框方式(DoDataExchange()函数)直接从记录集显示数据,使得从记录集中显示数据更为容易。并提供了记录移动等操作。
3. 多表联接的数据库应用程式
3. 1本例程式功能:
通过FSB表的BZM字段及DBK1表的HH字段,将Visual FoxPro 的 FSB表和DBK1表(结构如下)关联起来。程式运行出现界面如图1。用鼠标点击工具条的?、?、(、(则FSB表记录移动而DBK1表的记录没移动。用鼠标点击“关联”按钮,则DBK1表的记录和FSB表记录同步移动(BZM编辑框内容和HH编辑框内容相同)。假如,需要按照具体的关键字值来查询二个表中的相关记录,那么,在“定位” 编辑框中输入具体的关键字值,然后,用鼠标点击“关联”按钮,就会见到二个表在新的记录集实现关联。
表1: FSB表结构
字段名
类型
备注
BZM
C
索引关键字
DGDL1
N
DGZD1
N
其他字段
表2: DBK1表
字段名
类型
备注
HH
C
索引关键字
BL
N
ZZCM
C
其他字段
基于MFC ODBC类研发的数据库应用程式,是通过MFC ODBC类使用SQL语句方式操纵数据表的。数据库中表FSB和表DBK1关联查询的SQL语句是:
SELECT * FROM FSB,DBK1 WHERE FSB.BZM=DBK1.HH
由于创建一个CRecordset派生类时,一般只选择一个数据源中的一个表,因此基于MFC ODBC类研发的数据库应用程式要实现二个表关联,就要使用CRecordset类的参数m _strFilter。他相当于SQL语句中的WHERE子句。参数m _strSort相当于SQL语句中的GROUP BY子句。要注意m_strFilter字符串中不要包含“WHERE”关键字。本例在表FSB和表DBK1对应的CRecordset派生类中分别使用了mbzm和mhh二个m _strFilter参数。用鼠标点击“关联”按钮时,程式首先根据“定位” 编辑框中的内容作为mbzm的值,在表FSB检索结果集。表DBK1对应的CRecordset派生类根据表FSB对应的CRecordset派生类的当前记录m_bzm值,作为mhh的值实行检索,从而得到和表FSB关键字段BZM对应的表DBK1的记录。实现了表FSB和表DBK1的关联。由此可见,二表关联的关键是m _strFilter参数的配置。
图 1
3.2 数据库应用程式创建
3.2. 1 创建单表单文档的数据库应用程式
根据前面建立的数据源DB-FSB,使用VC Appwizard 生成一个单表单、单文档的数据库应用程式。选择数据源DB-FSB的数据表时应选择FSB.DBF。应用程式名为ZF0001(具体步骤可参考有关VC 资料)。ZF0001应用程式中创建了CZf0001Doc、CZf0001Set、CZf0001View等派生类。
3.2.2 配置m _strFilter参数
在上一步生成的CZf0001Set类中,按以下方式,在① ② ③程式中配置m _strFilter参数(黑体部分的语句都是为CZf0001Set的参数mbzm而手动增加的)。为节省篇幅,省略程式清单的部分内容。
①. 在Crecordset派生类的定义中,描述了被连接的数据源表的字段,并在VC Appwizard 生成的程式注释“// Field/Param Data ”中提示在此可定义参数。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 增强Visual C 研发环境
下一篇: VC 5创建不规则形状窗口
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash