VB数据库编程模式doc 14页.docx
- 文档编号:26511512
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:25
- 大小:225.75KB
VB数据库编程模式doc 14页.docx
《VB数据库编程模式doc 14页.docx》由会员分享,可在线阅读,更多相关《VB数据库编程模式doc 14页.docx(25页珍藏版)》请在冰豆网上搜索。
VB数据库编程模式doc14页
VB数据库编程模式(doc14页)
VB数据库编程
9.4.1ODBC概述
在传统的数据库管理系统中,每个数据库管理系统都有自己的应用程序开发接口(API),应用程序使用数据库系统所提供的专用开发工具(如嵌入式SQL语言)进行开发,这样的应用程序只能运行在特定的数据库系统环境下,适应性和可移植性比较差。
在用户硬件平台或操作系统发生变化时,应用程序需要重新编写。
嵌入式SQL语言的另一个缺点是它只能存取某种特定的数据库系统,因此一个应用程序只能连接同类的DBMS,而无法同时访问多个不同的DBMS,而在实际应用中通常是需要同时访问多个不同的DBMS的。
例如,在一个单位中,财务、生产和技术等部门常根据自身专业的特点选择不同的DBMS,而建立企业级管理信息系统时,需要同时访问各个部门的数据库。
这种情况下传统的数据库应用程序开发方法就难以实现。
为了解决这些问题,微软公司开发了ODBC(OpenDataBaseConnectivity,即开放数据库互连)。
ODBC是Microsoft公司开发的一套开放数据库系统应用程序接口规范,目前它已成为一种工业标准,它提供了统一的数据库应用编程接口(API),为应用程序提供了一套高层调用接口规范和基于动态连接库的运行支持环境。
使用ODBC开发数据库应用时,应用程序调用的是标准的ODBC函数和SQL语句,数据库底层
驱动程序管理器是一个Windows下的应用程序,在Windows95和WindowsNT环境下的控制面板上分别显示为“32位ODBC”图标和“ODBC”图标。
如果在Windows95和WindowsNT环境下没有这个图标,说明没有安装ODBC驱动程序管理器。
此软件可从Windows95操作系统、MicrosoftVC++、MicrosoftVB等软件中获得。
此管理器的主要作用是用来装载ODBC驱动程序、管理数据源、检查ODBC参数的合法性等。
3.DBMS驱动程序
ODBC应用程序不能直接存取数据库,它将所要执行的操作提交给数据库驱动程序,通过驱动程序实现对数据源的各种操作,数据库操作结果也通过驱动程序返回给应用程序。
4.数据源
数据源是指任一种可以通过ODBC连接的数据库管理系统,它包括要访问的数据库和数据库的运行平台。
数据源名掩盖了数据库服务器或数据库文件间的差别,通过定义多个数据源,每个数据源指向一个服务器名,就可在应用程序中实现同时访问多个DBMS的目的。
数据源(DataSourceName,简称DSN)是驱动程序与DBS连接的桥梁,数据源不是DBS,而是用于表达一个ODBC驱动程序和DBMS特殊连接的命名。
在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等,可以将数据源名看成是与一个具体数据库建立的连接。
数据源分为以下三类:
(1)用户数据源:
用户创建的数据源,称为“用户数据源”。
此时只有创建者才能使用,并且只能在所定义的机器上运行。
任何用户都不能使用其他用户创建的用户数据源。
(2)系统数据源:
所有用户和在WindowsNT下以服务方式运行的应用程序均可使用系统数据源。
(3)文件数据源:
文件数据源是ODBC3.0以上版本增加的一种数据源,可用于企业用户,ODBC驱动程序也安装在用户的计算机上。
总之,ODBC提供了在不同数据库环境中为C/S结构的客户机访问异构数据库的接口,也就是在由异构数据库服务器构成的客户机/服务器结构中,要实现对不同数据库进行的数据访问,就需要一个能连接不同的客户机平台到不同服务器的桥梁,ODBC就是起这种连接作用的桥梁。
ODBC提供了一个开放的、标准的能访问从PC机、小型机到大型机数据库数据的接口。
使用ODBC标准接口的应用程序,开发者可以不必深入了解要访问的数据库系统,比如其支持的操作和数据类型等信息,而只需掌握通用的ODBCAPI编程方法即可。
使用ODBC的另一个好处是当作为数据库源的数据库服务器上的数据库管理系统升级或转换到不同的数据库管理系统时,客户机端应用程序不需作任何改变,因此利用ODBC开发的数据库应用程序具有很好的移植性。
9.5ADO数据控件
9.5.1ADO对象模型
ADO(ActiveXDataObject)数据访问接口是Microsoft处理数据库信息的最新技术。
它是一种ActiveX对象,采用了被称为OLEDB的数据访问模式,是数据访问对象DAO、远程数据对象RDO和开放数据库互连ODBC三种方式的扩展。
ADO对象模型定义了—个可编程的分层对象集合,主要由三个对象成员Connection、Command和Recordset对象,以及几个集合对象Errors、Parameters和Fields等所组成。
图9.13示意了这些对象之间的关系。
表9.6是对这些对象的分工描述。
Connection对象
Recordset对象
图9.13ADO对象模型
表9.6ADO对象描述
对象名
描述
Connection
连接数据来源
Command
从数据源获取所需数据的命令信息
Recordset
所获得的一组记录组成的记录集
Error
在访问数据时,由数据源所返回的错误信息
Parameter
与命令对象有关的参数
Field
包含了记录集中某个字段的信息
要想在程序中使用ADO对象,必须先为当前工程引用ADO的对象库。
引用方式是执行“工程”菜单的“引用”命令,启动引用对话框,在清单中选取“MicrosoftActiveXDataObjects2.0Library”选项。
9.5.2使用ADO数据控件
在使用ADO数据控件前,必须先通过“工程|部件”菜单命令选择"MicrosoftADODataControl6.0(OLEDB)”选项,将ADO数据控件添加到工具箱。
ADO数据控件与VisualBasic的内部Data控件很相似,它允许使用ADO数据控件的基本属性快速地创建与数据库的连接。
1.ADO数据控件的基本属性
(1)ConnectionString属性
ADO控件没有DatabaseName属性,它使用ConnectionString属性与数据库建立连接。
该属性包含了用于与数据源建立连接的相关信息,ConnectionString属性带有4个参数,如表9.7所示。
(2)RecordSource属性
RecordSource确定具体可访问的数据,这些数据构成记录集对象Recordset。
该属性值可以是数据库中的单个表名,一个存储查询,也可以是使用SQL查询语言的一个查询字符串。
表9.7ConnectionString属性参数
参数
描述
Provide
指定数据源的名称
FileName
指定数据源所对应的文件名
RemoteProvide
在远程数据服务器打开一个客户端时所用的数据源名称
RemoteServer
在远程数据服务器打开一个主机端时所用的数据源名称
(3)ConnectionTimeout属性
用于数据连接的超时设置,若在指定时间内连接不成功显示超时信息。
(4)MaxRecords属性
定义从一个查询中最多能返回的记录数。
2.ADO数据控件的方法和事件
ADO数据控件的方法和事件与Data控件的方法和事件完全一样。
3.设置ADO数据控件的属性
下面通过使用ADO数据控件连接Student.mdb数据库来说明ADO数据控件属性的设置。
步骤1:
在窗体上放置ADO数据控件,控件名采用默认名“Adodcl”。
步骤2:
单击ADO控件属性窗口中的ConnectionString属性右边的“…”按钮,弹出“属性页”对话框。
在该对话框中允许通过三种不同的方式连接数据源:
“使用连接字符串”只需要单击“生成”按钮,通过选项设置自动产生连接字符串。
“使用DataLink文件”表示通过—个连接文件来完成。
“使用ODBC数据资源名称”可以通过下拉式列表框,选择某个创建好的数据源名称(DSN),作为数据来源对远程数据库进行控制。
步骤3:
采用“使用连接字符串”方式连接数据源。
单击“生成”按钮,打开“数据链接属性”对话框。
在“提供者”选项卡内选择一个合适的OLEDB数据源,Student.mdb是Access数据库,选择“MicrosoftJet3.51OLEDBProvider”选项。
然后单击“下—步”按钮或打开“连接”选项卡,在对话框内指定数据库文件,这里为Student.mdb。
为保证连接有效,可单击“连接”选项卡右下方的“测试连接”按钮,如果测试成功则关闭ConnectionString属性页。
步骤4:
单击ADO控件属性窗口中的RecordSource属性右边的“…”按钮,弹出记录源属性页对话框。
在“命令类型”下拉式列表框中选择“2-adCmdTable”选项,在“表或存储过程名称”下拉式列表框中选择Student.mdb数据库中的“基本情况”表,关闭记录源属性页。
此时,已完成了ADO数据控件的连接工作。
由于ADO数据控件是一个ActiveX控件,也可以用鼠标右键单击ADO数据控件,在弹出的快捷菜单中选择“ADODC属性”菜单命令,打开ADO数据控件属性页对话框,一次完成步骤1~步骤4的全部设置。
9.5.3ADO数据控件上新增绑定控件的使用
随着ADO对象模型的引入,VisualBasic6.0除了保留以往的一些绑定控件外,又提供了一些新的成员来连接不同数据类型的数据。
这些新成员主要有DataGrid、DataCombo、DataList、DataReport、MSHFlexGrid、MSChart控件和MonthView等控件。
这些新增绑定控件必须使用ADO数据控件进行绑定。
VisualBasic6.0在绑定控件上不仅对DataSource和DataField属性在连接功能上作了改进,又增加了DataMember与DataFormat属性使数据访问的队列更加完整。
DataMember属性允许处理多个数据集,DataFormat属性用于指定数据内容的显示格式。
例9.6使用ADO数据控件和DataGrid数据网格控件浏览数据库Student.mdb,并使之具有编辑功能。
在窗体上放置ADO数据控件,并按前面介绍的ADO数据控件属性设置过程连接数据库Student.mdb中的基本情况表。
DataGrid控件允许用户同时浏览或修改多个记录的数据。
在使用DataGrid控件前也必须先通过“工程|部件”菜单命令选择“MicrosoftDataGridControl6.0(OLEDB)”选项,将DataGrid控件添加到工具箱,再将DataGrid控件放置到窗体上。
设置DataGrid网格控件的DataSource属性为Adodc1,就可将DataGrid1绑定到数据控件Adodc1上。
显示在DataGrid网格内的记录集,可以通过DataGrid控件的AllowAddNew、AllowDelete和AllowUpdate属性设置控制增,删、改操作。
如果要改变DataGrid网格上显示的字段,可用鼠标右键单击DataGrid控件,在弹出的快捷菜单中选择“检索字段”选项。
VisualBasic提示是否替换现有的网格布局,单击“是”按钮就可将表中的字段装载到DataGrid控件中。
再次用鼠标右键单击DataGrid控件,在弹出的快捷菜单中选择“编辑”选项,进入数据网格字段布局的编辑状态,此时,当鼠标指在字段名上时,鼠标指针变成黑色向下箭头。
用鼠标右键单击需要修改的字段名,在弹出的快捷菜单中选择“删除”选项,就可从DataGrid控件中删除该字段,也可选择“属性”选项修改字段的显示宽度或字段标题。
图9.14所示为具有增、删、改功能的数据网格绑定。
标有*号的记录行表示允许增加新记录。
图9.14具有增、删、改功能的数据网格绑定
9.5.4使用数据窗体向导
VisualBasic6.0提供了一个功能强大的数据窗体向导,通过几个交互过程,便能创建前面介绍的ADO数据控件和绑定控件,构成—个访问数据的窗口。
数据窗体向导属于外接程序,在使用前必须从VisualBasic6.0集成开发环境的横向菜单中点击“外接程序”,再点击子菜单的“外接程序管理器”,从打开的“外接程序管理器”窗口选择“VB6数据窗体向导”命令,将数据窗体装入到“外接程序”中。
这里以Student.mdb数据库的基本情况表作为数据源来说明数据访问窗口建立的过程。
例9.7使用数据窗体向导建立Student.mdb数据库的数据访问对话框。
步骤1:
执行“外接程序”菜单中的“数据窗体向导”命令,进入“数据窗体向导-介绍”对话框,可以利用先前建立的数据窗体信息配置文件创建外观相似的数据访问窗体,选择“无”将不使用现有的配置文件。
步骤2:
单击“下—步”按钮,进入“数据窗体向导-数据库类型”对话框,可以选择任何版本的Access数据库或任何ODBC兼容的用于远程访问的数据库。
本例中选择Access数据库。
步骤3:
在“数据窗体向导—数据库”对话框内选择具体的数据库文件。
本例为Student.mdb数据库。
步骤4:
在“数据窗体向导—Form”对话框内设置应用窗体的工作特性。
其中,在“窗体名称为”文本框输入将要创建的窗体名;“窗体布局”指定窗口内显示数据的类型,可以按单条记录形式显示,也可以按数据网格形式同时显示多条记录;绑定类型用于选择连接数据来源的方式,可以使用ADODC数据控件访问数据,也可以使用ADO对象程序代码访问数据。
本例窗体名为frmjbqk,选“单个记录”形式,使用“ADO数据控件”访问数据。
步骤5:
在“数据窗体向导-记录源”对话框内选择所需要的数据。
其中,“记录源”下拉式列表框用于选择数据库中的表单,本例选择“基本情况”表;窗口中间的4个箭头按钮用于选定字段,“列排序按”下拉式列表框用于选择排序依据。
步骤6:
在“数据窗体向导-控件选择”对话框内,选择所创建的数据访问窗体需要提供哪些操作按钮。
步骤7:
进入“数据窗体向导—已完成”对话框,可以将整个操作过程保存到一个向导配置文件.rwp中。
单击“完成”按钮结束数据窗体向导的交互,此时向导将自动产生数据访问对话框的画面及代码。
可以对产生的窗体布局形式进行调整或在此基础上加上其他控件对象。
图9.15为调整照片位置的数据访问对话框运行结果。
各按钮的程序代码不难理解,请读者自己阅读。
图9.15数据窗体向导创建的数据访问对话框
图9.16为窗体布局(步骤4)选定网格(数据表)形式的数据访问窗口运行结果。
图9.17所示为窗体布局选定主表/细表形式,以基本情况表作为主表,学生成绩表为细表所建立的数据访问窗口。
图9.18为窗体布局(步骤4)选定MSHFlexGrid数据网格形式的数据访问窗口运行结果。
图9.16选定网格(数据表)形式图9.18选定MSHFlexGrid数据网格
图9.17选定主表/细表形式
9.6VB中SQL的实现
SQL中使用SELECT语句实现查询,SELECT语句基本上是数据库记录集的定义语句。
Data控件的RecordSource属性不—定是数据表名,可以是数据表中的某些行或多个数据表中的数据组合。
可以直接在Data控件的RecordSource属性栏中输入SQL,也可在代码中通过SQL语句将选择的记录集赋给数据控件的RecordSource属性,也可赋予对象变量。
例9.8将例9.5中的查找功能改用SQL语句处理,显示某专业的学生记录。
使用SQL语句查询只要将例9.5中命令按钮Command5_Click事件写为如下代码:
PrivateSubCommand5_Click()
DimmzyAsString
mzy=InputBox$("请输入专业","查找窗")
Data1.RecordSource="Select*From基本情况Where专业='"&mzy&"'"
Data1.Refresh
IfData1.Recordset.EOFThen
MsgBox"无此专业!
",,"提示"
Data1.RecordSource="基本情况"
Data1.Refresh
EndIf
EndSub
程序中“Select*”选择表中所有字段(也可以指定选择部分列);“From基本情况”短语指定数据来源;“Where专业='"&mzy&"'"”短语构成查询条件,用于过滤表中的记录;Data1.Refresh方法激活这些变化。
此时,若Data1.Recordset.EOF为True,表示记录过滤后无数据,重新打开原来的基本情况表。
注意:
代码中的两处Refresh语句不能合用为一句,这是因为在执行了Select命令后,必须激活这些变化,然后才能判断记录集内有无数据。
也可用SQL语句实现模糊查询,命令按钮Command5_Click事件改为如下代码:
PrivateSubCommand5_Click()
DimmzyAsString
mzy=InputBox$("请输入专业","查找窗")
Data1.RecordSource="Select*From基本情况Where专业like'*"&mzy&"*'"
Data1.Refresh
IfData1.Recordset.EOFThen
MsgBox"无此专业!
",,"提示"
Data1.RecordSource="基本情况"
Data1.Refresh
EndIf
EndSub
例9.9用SQL语句从Student.mdb数据库的两个数据表中选择数据构成记录集,并通过数据控件浏览记录集。
在窗体上放置与例9.2类似的控件,如图9.20所示。
Data控件的DatabaseName属性指定数据库Student.mdb,RecordSource属性空缺,各文本框的DataSource=Data1,DataField属性分别设置为学号、姓名、课程、成绩,而照片字段绑定图形框。
本例要求从基本情况中选择学生的学号、姓名、照片,从学生成绩表中选择该学生的课程和成绩来构成记录集,可在Form_Load事件中使用SQL语句,通过“Where学生成绩表.学号=基本情况.学号”短语实现两表之间的连接,用Select命令从学生成绩表中选择课程、成绩字段,从基本情况表中选择学号、姓名和照片字段构成记录集:
PrivateSubForm_Load()
Data1.RecordSource="Select基本情况.学号,基本情况.姓名,基本情况.照片,学生成绩表.课程,学生成绩表.成绩From学生成绩表,基本情况Where学生成绩表.学号=基本情况.学号"
EndSub
当窗体启动后,数据显示如图9.19所示,数据控件上的箭头按钮可改变记录位置。
如果要求显示的记录按一定的顺序排列,可使用ORDERBY子句。
图9.19数据显示
注意:
当FROM子句列出多个表时,它们出现的顺序并不重要。
Select短语中字段的排列决定了所产生的记录集内每一列数据的排列顺序。
为了提高可读性可以重新排序表中的字段。
例9.10用SQL指令按专业统计Student.mdb数据库中各专业的人数,要求按图9.20所示形式输出。
在窗体上放置一个Data控件和一个网格控件MSFlexGrid1。
Data1的DatabaseName属性指定数据库Student.mdb,网格控件的DataSource=Data1。
图9.20通过数据控件浏览记录集
为了统计各专业的人数,需要对基本情况表内的记录按专业分组。
“GroupBy专业”可将同一专业的记录合并成一条新记录。
要记录统计结果,需要构造一个输出字段,此时可使用SQL的统计函数Count()作为输出字段,它按专业分组创建摘要值。
若希望按用户要求的标题显示统计摘要值,可用As短语命名一个别名。
“按专业统计人数”按钮的指令代码为:
PrivateSubCommand1_Click()
Data1.RecordSource="select专业,count(*)as人数from基本情况groupby专业"
Data1.Refresh
EndSub
运行结果如图9.21。
图9.21使用SQL的统计函数
有时,我们只要返回一定数量的记录,如获取平均成绩最好的前5名,则“按平均成绩统计前5名”按钮的指令代码为:
PrivateSubCommand2_Click()
Data1.RecordSource="selecttop5学号,avg(成绩)as平均成绩from学生成绩表groupby学号orderbyavg(成绩)desc"
Data1.Refresh
EndSub
这里,“Groupby学号”短语将同一学生的各门课程的记录合并成一条记录,由Avg(成绩)计算出该学生的平均成绩,“OrderByAvg(成绩)Desc”短语按平均成绩的降序排列数据,“Top5”短语返回最前面的5条记录。
如果不包括ORDERBY子句,查询将从学生成绩表中返回随机的5条记录。
“恢复原表内容”按钮的指令代码为:
PrivateSubCommand3_Click()
Data1.RecordSource="基本情况"
Data1.Refresh
EndSub
以上介绍的是在Data控件上使用SQL,如果要在ADO数据控件上使用SQL语句,最好通过代码配合ADO数据控件完成数据库的连接,这可给程序带来更大的灵活性。
例9.11我们将例9.9中的Data控件改用ADO数据控件,用SQL语句从Student.mdb数据库的两个数据表中选择数据构成记录集。
将Data控件改用ADO数据控件Adodc1,各文本框的Datasource=Adodc1,DataField属性分别设置为学号、姓名、课程、成绩,而字段照片绑定图形框。
ADO数据控件的ConnectionString属性设置为与数据源连接的相关信息,通过操作完成与student.mdb的数据连接(此时,可查看到ConnectionString属性的内容);DataSource指定连接的数据库文件名,如图9.22。
图9.22使用ADO数据控件
即DataSource属性使用SQL语句:
select学生成绩表.*,基本情况.姓名,基本情况.照片from学生成绩表,基本情况where学生成绩表.学号=基本情况.学号
程序执行后将产生与图9.22所示相同的效果。
例9.12设计一个窗体,计算Student.mdb数据库内学生成绩表中每个学生的平均成绩,产生姓名、平均成绩和最低成绩三项数据,按平均成绩降序排列数据,并用该数据作图。
学生成绩表中没有平均成绩和最低成绩这两项数据,可以在SELECT子句内使用统计函数AVG()和Min()产生,“GroupBy学号”可将同一学生的记录合并成一条新记录。
学生成绩表中没有姓名字段,故需要通过条件“基本情况.学号=学生成绩表.学号”从基本情况表取得。
然后,将产生的记录集连接到ADO数据控件上。
要显示作图数据,可在窗体上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB数据库编程模式doc 14页 VB 数据库 编程 模式 doc 14