第9章_数据库_第1页
第9章_数据库_第2页
第9章_数据库_第3页
第9章_数据库_第4页
第9章_数据库_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2第第 9 章章 VB数据库访问技术数据库访问技术 ADO数据控件数据控件 数据控件数据控件 本地数据库设计本地数据库设计 数据库概述数据库概述 VB中中SQL的实现的实现 VB中使用中使用ODBC 39.1 数据库概述数据库概述9.1.1 VB中的数据访问中的数据访问VB中两种与数据库相连接口方法:中两种与数据库相连接口方法: Data控件控件(Data Control)和数据访问对象和数据访问对象(DAO) VB通过通过DAO和和Jet引擎可识别三类数据库:引擎可识别三类数据库: VB数据库:也称本地数据库数据库:也称本地数据库 ,数据库文件使用与,数据库文件使用与Microsoft A

2、ccess相同的格式相同的格式 外部数据库:包括外部数据库:包括dDase ,dBase ,FoxPro 2.0、2.5以及以及Paradox 3.x、4.x ODBC数据库:包括符合数据库:包括符合ODBC标准的客户标准的客户-服务器数据服务器数据库,如库,如Microsoft SQL Server 49.1.2 VB数据库体系结构数据库体系结构1VB数据库应用程序的组成数据库应用程序的组成VB数据库应用程序包含三部分,如图数据库应用程序包含三部分,如图9-1所示所示 图9-1 VB数据库应用程序应用程序的组成 5v(1) 用户界面和应用程序代码用户界面和应用程序代码 用户界面是用户所看见的

3、用于交互的界面,它包括显示数据并允许用用户界面是用户所看见的用于交互的界面,它包括显示数据并允许用户查看或更新数据的窗体。驱动这些窗体的是应用程序的户查看或更新数据的窗体。驱动这些窗体的是应用程序的VB代码,代码,包括用来请求数据库服务的数据访问对象和方法,比如添加或删除记包括用来请求数据库服务的数据访问对象和方法,比如添加或删除记录、执行查询等。录、执行查询等。 v(2) Jet引擎引擎 Jet引擎被包含在一组动态链接库引擎被包含在一组动态链接库(DLL)文件中。在运行时,文件中。在运行时,这些文件被链接到这些文件被链接到VB程序。它把应用程序的请求翻译成程序。它把应用程序的请求翻译成对对.

4、mdb(Access文件后缀文件后缀)文件或其他数据库的物理操作。文件或其他数据库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行处理器,接收并执行SQL查询,实现所需的数据操作。另查询,实现所需的数据操作。另外,它还包含一个结果处理器,用来管理查询所返回的结外,它还包含一个结果处理器,用来管理查询所返回的结果。果。 6v(3) 数据库数据库v数据库是包含数据库表的一个或多个文件。数据库是包含数据库表的一个或多个文

5、件。对于本地对于本地VB或或Access数据库来说,就数据库来说,就是是.mdb文件。对于文件。对于ISAM数据库,它可能是数据库,它可能是包含包含.dbf(dBase文件后缀文件后缀)文件或其他扩展文件或其他扩展名的文件。或者,应用程序可能会访问保名的文件。或者,应用程序可能会访问保存在几个不同的数据库文件或格式中的数存在几个不同的数据库文件或格式中的数据。但无论在什么情况下,数据库本质上据。但无论在什么情况下,数据库本质上都是被动的,它包含数据但不对数据做任都是被动的,它包含数据但不对数据做任何操作。数据操作是数据库引擎的任务何操作。数据操作是数据库引擎的任务 7v2数据库应用程序的存放数

6、据库应用程序的这三个部分可以被分别放置在不同数据库应用程序的这三个部分可以被分别放置在不同的位置上。可以把它们都放在一台计算机上,供单用的位置上。可以把它们都放在一台计算机上,供单用户应用程序使用,也可以放置在通过网络连接起来的户应用程序使用,也可以放置在通过网络连接起来的不同计算机上。例如,数据库可以驻留在中央服务器不同计算机上。例如,数据库可以驻留在中央服务器上,而用户界面上,而用户界面(即应用程序即应用程序)则驻留在几个客户机上,则驻留在几个客户机上,让许多用户访问相同的数据。让许多用户访问相同的数据。 8图图9-2 客户客户-服务器数据库与远程数据库的不同点服务器数据库与远程数据库的不

7、同点 99.2 本地数据库设计vVB中创建数据库的途径主要如下。中创建数据库的途径主要如下。 可视化数据管理器:使用可视化数据管理器,不可视化数据管理器:使用可视化数据管理器,不需要编程就可以创建需要编程就可以创建Jet数据库。数据库。 DAO:使用:使用VB的的DAO部件可以通过编程的方法部件可以通过编程的方法创建数据库。创建数据库。 Microsoft Access:因为:因为Microsoft Access使使用了与用了与VB相同的数据库引擎和格式,所以,用相同的数据库引擎和格式,所以,用Microsoft Access创建的数据库和直接在创建的数据库和直接在VB中中创建的数据库是一样的

8、。创建的数据库是一样的。 数据库应用程序:像数据库应用程序:像FoxPro、dBase或或ODBC客户客户-服务器应用程序这样的产品,可以作为外部服务器应用程序这样的产品,可以作为外部数据库,数据库,VB可通过可通过ISAM或或ODBC驱动程序来访驱动程序来访问这些数据库。问这些数据库。 109.2.2 数据库建立及操作数据库建立及操作 v1建立数据库建立数据库student.mdb(学生数据库学生数据库) :v基本情况基本情况(学号,姓名,性别,专业,出生年月,学号,姓名,性别,专业,出生年月,照片,备注照片,备注);v学生成绩表学生成绩表(学号,课程,成绩,学期学号,课程,成绩,学期)。v

9、(1) 建立数据库结构建立数据库结构单击单击“文件文件”“新建新建”“Microsoft Access”“版本版本7.0 MDB”命令,在命令,在“选择要创选择要创建的建的Microsoft Access数据库数据库”窗口中选定新建窗口中选定新建数据库的路径并输入数据库名,这里为数据库的路径并输入数据库名,这里为student.mdb。 11v(2) 添加数据表添加数据表v将鼠标移到数据库窗口区域内,单击鼠标将鼠标移到数据库窗口区域内,单击鼠标右键,在弹出的菜单中选择右键,在弹出的菜单中选择“新建表新建表”命命令,出现令,出现“表结构表结构”对话框,利用该对话对话框,利用该对话框可以建立数据表

10、的结构。框可以建立数据表的结构。 v按顺序输入按顺序输入“姓名姓名”、“性别性别”、“专专业业”、“出生年月出生年月”、“照片照片”、“备注备注”字段,然后单击字段,然后单击“关闭关闭”按钮返回按钮返回“表结表结构构”对话框。对话框。 12v(3) 建立索引v单击“添加索引”按钮,会出现如图9-4所示的对话框,通过此对话框可以将数据表的某些字段设置为索引。在“名称”文本框中输入索引的名称,然后从下边的“可用字段”列表框中选择作为索引的字段,这里选择的是“学号”。 图9-4 设置索引 13v2录入数据数据管理器提供了简单的数据录入功能。在工具栏上单击DBGrid显示风格的按钮,然后在要录入数据的

11、数据表上单击鼠标右键,选择“打开”命令,则出现以网格风格显示数据的窗口,如果此表中已有数据,则此时显示出此表中的全部数据;若此表中无数据,则显示出一个空表。如图9-5所示,这里是以“基本情况”表为例,并且输入了部分数据后的情况 14图图9-5 显示数据显示数据 153建立查询VB的数据管理器提供了一个图形化的设置查询条件的窗口查询生成器。选择“实用程序”菜单下的“查询生成器”命令,或在数据库窗口区域单击鼠标右键,然后在弹出的菜单中选择“新查询”命令,即可出现“查询生成器”对话框,如图9-6所示。 16图图9-6 “查询生成器查询生成器”对话框对话框 17假设要查询学号为110002的学生的基本

12、情况,可按下述步骤进行。 首先选择要进行查询的数据表,单击“表”列表框中的“基本情况”表。 在“字段名称”下拉列表框中选定“基本情况.学号”。 单击“运算符”下拉列表框,选择“=”。 单击“列出可能的值”按钮,在“值”中输入110002。 单击“将And加入条件”按钮,将条件加入“条件”列表框中。 在“要显示的字段”列表框中,选定需要显示的字段。注意,这里所选的字段就是在查询结果中要查看的字段。 单击“运行”按钮,在随后出现的VisData对话框中,选择“否”,并进一步选择“运行”,即可看到查询结果。 单击“显示”按钮,在随后出现的“SQL Query”窗口中,会显示刚建立的查询所对应的SQL

13、语句。 189.3 数据控件9.3.1 数据控件的属性数据控件的属性1Connect属性属性 Connect属性指定数据控件所要连接的数据库类属性指定数据控件所要连接的数据库类型,型,Visual Basic默认的数据库是默认的数据库是Access的的MDB文件,此外也可连接文件,此外也可连接DBF、XLS、ODBC等等类型的数据库。类型的数据库。 2DatabaseName属性属性 DatabaseName属性指定具体使用的数据库文件属性指定具体使用的数据库文件名,包括所有的路径名。如果连接的是单表数据名,包括所有的路径名。如果连接的是单表数据库,则库,则DatabaseName属性应设置为

14、数据库文件属性应设置为数据库文件所在的子目录名,而具体文件名放在所在的子目录名,而具体文件名放在RecordSource属性中。属性中。 193RecordSource属性属性 RecordSource确定具体可访问的数据,这些数确定具体可访问的数据,这些数据构成记录集对象据构成记录集对象Recordset。该属性值可以是数。该属性值可以是数据库中的单个表名,可以是一个存储查询,也可以据库中的单个表名,可以是一个存储查询,也可以是使用是使用SQL查询语言的一个查询字符串。查询语言的一个查询字符串。 4RecordType属性属性 RecordType属性确定记录集类型。属性确定记录集类型。5E

15、ofAction和和BofAction属性属性 当记录指针指向当记录指针指向Recordset对象的开始对象的开始(第一个第一个记录前记录前)或结束或结束(最后一个记录后最后一个记录后)时,数据控件的时,数据控件的EofAction和和BofAction属性的设置或返回值决定了属性的设置或返回值决定了数据控件要采取的操作。属性的取值见表数据控件要采取的操作。属性的取值见表9-1。 20表9-1 EofAction和BofAction属性属性取值操作BofAction0控件重定位到第一个记录1移过记录集开始位,定位到一个无效记录,触发数据控件对第一个记录的无效事件ValidateEofActio

16、n0控件重定位到最后一个记录1移过记录集结束位,定位到一个无效记录,触发数据控件对最后一个记录的无效事件Validate2向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针,新记录写入数据库 21 在Visual Basic中,数据控件本身不能直接显示记录集中的数据,必须通过能与它绑定的控件来实现。可与数据控件绑定的控件对象有文本框、标签、图像框、图形框、列表框、组合框、复选框、网格、DB列表框、DB组合框、DB网格、OLE容器等控件。要使绑定控件能被数据库约束,必须在设计或运行时对这些控件的两个属性进行设置。 (1) DataSource属性DataSource属性通过指定一个有效的

17、数据控件连接到一个数据库上。(2) DataField属性DataField属性设置数据库有效的字段与绑定控件建立联系。绑定控件、数据控件和数据库三者的关系如图9-7所示。图9-7 绑定控件、数据控件和数据库三者的关系 22v例例9.1 建立建立student.mdb数据库,它包含数据库,它包含两个表:两个表:“基本情况表基本情况表”和和“学生成绩学生成绩表表”,见表,见表9-2和表和表9-3。表9-2 基本情况表结构字段名类型宽度学号Text6姓名Text10性别Text2专业Text10出生年月Date8照片Binary0 23表9-3 学生成绩表结构字段名类型宽度学号Text6课程Tex

18、t10成绩Long4学期Text2 24v例9.2 设计一个窗体用于显示建立的student.mdb数据库中基本情况表的内容。 参考如图9-8所示窗体,在窗体上放置1个数据控件、1个图形框、5个文本框和5个标签控件。5个标签控件分别给出相关的提示说明。 图图9-8 显示显示student.mdb基本情况表的数据基本情况表的数据 25 将数据控件将数据控件Data1的的Connect属性指定为属性指定为Access类类型,型,DatabaseName属性连接数据库属性连接数据库student.mdb,RecordSource属性设置为属性设置为“基本情况基本情况”。 图形框和图形框和5个文本框控

19、件个文本框控件Text1Text5的的DataSource属性都设置成属性都设置成Data1。通过单击这些绑。通过单击这些绑定控件的定控件的DataField属性上的属性上的“”按钮,将显示基按钮,将显示基本情况表所含的全部字段,分别选择与其对应的字本情况表所含的全部字段,分别选择与其对应的字段照片、学号、姓名、性别、专业和出生年月,使段照片、学号、姓名、性别、专业和出生年月,使之建立约束关系。之建立约束关系。 26v例9.3 用数据网格控件MsFlexGrid显示student.mdb数据库中基本情况表的内容。 MsFlexGrid控件不是Visual Basic工具箱内的默认控件,需要在开

20、发环境中选择“工程”“部件”命令,并在随即出现的对话框中选择“MicroSoft FlexGrid Control 6.0”选项,将其添加到工具箱中。 表9-4 控件属性默认控件名其他属性设置Data1DatabaseName=c:student.mdbRecordsetType=0RecordSource=基本情况MSFlexGrid1DataSource=Data1FixedCols=0 27图图9-9 使用数据网格控件使用数据网格控件 289.3.2 数据控件的事件1Reposition事件 Reposition事件发生在一条记录成为当前记录后,只要改变记录集的指针使其从一条记录移到另一

21、条记录,会产生Reposition事件。 在例9.2的Data1_Reposition事件中加入如下代码:Private Sub Data1_Reposition( ) Data1.Caption = Data1.Recordset.AbsolutePosition + 1End Sub这里,Recordset为记录集对象,AbsolutePosition属性指示当前指针值(从0开始)。当单击数据控件对象上的箭头按钮时,数据控件的标题区会显示记录的序号 292Validate事件当要移动记录指针、修改与删除记录前或卸载含有数据控件的窗体时都会触发Validate事件。Validate事件检查被

22、数据控件绑定的控件内的数据是否发生变化。它通过Save参数(True或False)判断是否有数据发生变化,Action参数判断哪一种操作触发了Validate事件。参数可为表9-5中的值。 30表9-5 Validate事件的Action参数Action值描述Action值描述0取消对数据控件的操作6Update1MoveFirst7Delete2MovePrevious8Find3MoveNext12设置Bookmark4MoveLast10Close5AddNew11卸载窗体 31一般可用一般可用Validate事件来检查数据的有效性。例事件来检查数据的有效性。例如,在例如,在例9.2中,

23、如果不允许用户在数据浏览时清中,如果不允许用户在数据浏览时清空性别数据,可使用下列代码:空性别数据,可使用下列代码:Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save And Len(Trim(Text3) = 0 Then Action = 0 MsgBox 性别不能为空!性别不能为空!End IfEnd Sub 329.3.3 数据控件的常用方法数据控件的常用方法 数据控件的内置功能很多,可以在代码中用数据控数据控件的内置功能很多,可以在代码中用数据控件的方法访问这些属性。件的方法访问这些属性。1Re

24、fresh方法方法如果在设计状态没有为打开数据库控件的有关属性如果在设计状态没有为打开数据库控件的有关属性全部赋值,或当全部赋值,或当RecordSource在运行时被改变后,在运行时被改变后,必须使用数据控件的必须使用数据控件的Refresh方法激活这些变化。在方法激活这些变化。在多用户环境下,当其他用户同时访问同一数据库和多用户环境下,当其他用户同时访问同一数据库和表时,表时,Refresh方法将使各用户对数据库的操作有效。方法将使各用户对数据库的操作有效。 33例如,将例9.2的设计参数改用代码实现,使所连接数据库所在的文件夹可随程序而变化:Private Sub Form_Load(

25、) Dim mpath As String Mpath=App.Path 获取当前路径 If Right(mpath,1)/ Then mpath=mpath+/ Data1.DatabaseName=mpath+student.mdb 连接数据库 Data1.RecordSource=基本情况 构成记录集对象 Data1.Refresh 激活数据控件End Sub 342UpdateControls方法方法UpdateControls方法可以将数据从数据库中重方法可以将数据从数据库中重新读到被数据控件绑定的控件内。因而我们可新读到被数据控件绑定的控件内。因而我们可使用使用UpdateCont

26、rols方法终止用户对绑定控件方法终止用户对绑定控件内数据的修改。内数据的修改。例如,将代码例如,将代码Data1.UpdateControts放在一个命放在一个命令按钮的令按钮的Click事件中,就可以实现对记录修改事件中,就可以实现对记录修改的功能。的功能。 353UpdateRecord方法当对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。如果使用UpdateRecord方法,可强制数据控件将绑定控件内的数据写入数据库,而不再触发Validate事件。在代码中可以用该方法来确认修改。 369.3.4 记录集的属性与方法记录集的属性与方法 由RecordSource确定

27、的具体可访问的数据构成的记录集Recordset也是一个对象,因而,它和其他对象一样具有属性和方法。下面列出记录集常用的属性和方法。1AbsolutePosition属性AbsolutePosition返回当前指针值,如果是第1条记录,其值为0,该属性为只读属性。2Bof和Eof的属性Bof判定记录指针是否在首记录之前,若Bof为True,则当前位置位于记录集的第1条记录之前。与此类似,Eof判定记录指针是否在末记录之后。3Bookmark属性Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可以使用Bookmark属性重定位记录集的指针,但不能使用Absolute

28、Postion属性。 374Nomatch属性在记录集中进行查找时,如果找到相匹配的记录,则Recordset的NoMatch属性为False,否则为True。该属性常与Bookmark属性一起使用。5RecordCount属性RecordCount属性对Recordset对象中的记录计数,该属性为只读属性。在多用户环境下,RecordCount属性值可能不准确,为了获得准确值,在读取RecordCount属性值之前,可使用MoveLast方法将记录指针移至最后一条记录上。 386Move方法方法使用使用Move方法可代替对数据控件对象的方法可代替对数据控件对象的4个箭头个箭头按钮来遍历整个记

29、录集。按钮来遍历整个记录集。5种种Move方法如下。方法如下。 MoveFirst方法:移至第方法:移至第1条记录。条记录。 MoveLast方法:移至最后一条记录。方法:移至最后一条记录。 MoveNext方法:移至下一条记录。方法:移至下一条记录。 MovePrevious方法:移至上一条记录。方法:移至上一条记录。 Move n方法:向前或向后移方法:向前或向后移n条记录,条记录,n为指为指定的数值。定的数值。 39例9.4 在窗体上用4个命令按钮代替例9.2数据控件对象的4个箭头按钮。在例9.2的基础上,在窗体上增加4个命令按钮,将数据控件的Visible属性设置为False,如图9-

30、10所示。通过对4个命令按钮的编程代替对数据控件对象的4个箭头按钮的操作。图9-10 用按钮代替数据控件对象的箭头按钮 40命令按钮Command1_Click事件移至第1条记录,代码如下:Private Sub Command1_Click( ) Data1.Recordset.MoveFirstEnd Sub命令按钮Command4_Click事件移至最后一条记录,代码如下:Private Sub Command4_Click( ) Data1.Recordset.MoveLastEnd Sub 41另外两个按钮的代码需要考虑另外两个按钮的代码需要考虑Recordset对象的边界的对象的边

31、界的首尾,如果越界,则用首尾,如果越界,则用MoveFirst方法定位到第方法定位到第1条记录条记录或用或用MoveLast方法定位到最后一条记录。程序代码如下:方法定位到最后一条记录。程序代码如下:Private Sub Command2_Click( ) Data1.Recordset.MovePrevious If Data1.Recordset.Bof Then Data1.Recordset.MoveFirstEnd SubPrivate Sub Command3_Click( ) Data1.Recordset.MoveNext If Data1.Recordset.Eof The

32、n Data1.Recordset.MoveLastEnd Sub 42v7Find方法使用Find方法可在指定的Dynaset或Snapshot类型的Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。4种Find方法如下。 FindFirst方法:从记录集的开始查找满足条件的第1条记录。 FindLast方法:从记录集的尾部向前查找满足条件的第l条记录。 FindNext方法:从当前记录开始查找满足条件的下一条记录。 FindPrevious方法:从当前记录开始查找满足条件的上一条记录。4种Find方法的语法格式相同:数据集合.Find方法 条件条件是一个指定字段与常

33、量关系的字符串表达式。在构造表达式时,除了用普通的关系运算外,还可以用Like运算符。 438Seek方法使用使用Seek方法必须打开表的索引,它在方法必须打开表的索引,它在Table表中表中查找与指定索引规则相符的第查找与指定索引规则相符的第1条记录,并使之成为条记录,并使之成为当前记录。其语法格式为:当前记录。其语法格式为:数据表对象数据表对象.Seek Comparison,Keyl,Key2Seek允许接收多个参数,第允许接收多个参数,第1个是比较运算符个是比较运算符Comparison,Seek方法中可用的比较运算符有方法中可用的比较运算符有=、=、=, 110001 459.3.5

34、 数据库记录的增、删、改操作数据库记录的增、删、改操作需要使用AddNew、Delete、Edit、Update和Refresh方法。它们的语法格式为:数据控件.记录集.方法名1增加记录AddNew方法可在记录集中增加新记录。增加记录的步骤如下。 调用AddNew方法。 给各字段赋值。给字段赋值格式为:Recordset.Fields(字段名)=值 调用Update方法,确定所做的添加,将缓冲区内的数据写入数据库。 46注意:如果使用AddNew方法添加新的记录,但是没有使用Update方法而移动到其他记录,或者关闭记录集,那么所做的输入将全部丢失,而且没有任何警告。当调用Update方法写入

35、记录后,记录指针自动返回到添加新记录前的位置上,而不显示新记录。为此,可在调用Update方法后,使用MoveLast方法将记录指针再次移到新记录上。 472删除记录要从记录集中删除记录的操作分为三步: 定位被删除的记录使之成为当前记录。 调用Delete方法。 移动记录指针。 注意:在使用Delete方法时,当前记录立即删除,不加任何的警告或者提示。删除一条记录后,被数据库所约束的绑定控件仍旧显示该记录的内容。因此,必须移动记录指针刷新绑定控件,一般采用移至下一记录的处理方法。在移动记录指针后,应该检查Eof属性。 483编辑记录数据控件自动提供了修改现有记录的能力,当直接改变被数据库所约束

36、的绑定控件的内容后,须单击数据控件对象的任一箭头按钮来改变当前记录,确定所做的修改。也可通过程序代码来修改记录,使用程序代码修改当前记录的步骤为: 调用Edit方法。 给各字段赋值。 调用Update方法,确定所做的修改。注意:如果要放弃对数据的所有修改,可用Refresh方法,重读数据库,没有调用Update方法,数据的修改就没有写入数据库,所以这样的记录会在刷新记录集时丢失 49例9.5 在例9.2的基础上加入“新增”、“删除”、“修改”、“放弃”和“查找”按钮,通过对5个按钮的编程建立增、删、改、查功能,如图9-11所示 图9-11 建立增、删、改、查功能 50Private Sub C

37、ommand1_Click( ) On Error Resume Next Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled If Command1.Caption = 新增 Then Command1.Caption = 确认 Data1.Recordset.AddNew Text1.SetFocus Else Command

38、1.Caption = 新增 Data1.Recordset.Update Data1.Recordset.MoveLast End IfEnd Sub 51命令按钮Command2_Click事件调用方法删除当前记录。当记录集中的记录全部被删除后,再执行Move语句将发生错误,这时由On Error Resume Next语句处理错误。Private Sub Command2_Click( ) On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.Eof Then Dat

39、a1.Recordset.MoveLastEnd Sub 52Private Sub Command3_Click( ) On Error Resume Next Command1.Enabled = Not Command1.Enabled Command2.Enabled = Not Command2.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled If Command3.Caption = 修改 Then Command3.Caption = 确认 Data1.

40、Recordset.Edit Text1.SetFocus Else Command3.Caption = 修改 Data1.Recordset.Update End IfEnd Sub 53Private Sub Command4_Click( ) On Error Resume Next Command1.Caption = 新增 Command3.Caption = 修改 Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Command4.Enabled = False Command5.Ena

41、bled = True Data1.UpdateControls Dala1.Recordset.MoveLastEnd Sub 54Private Sub Command5_Click( ) Dim mzy As String mzy = InputBox$(请输入专业, 查找窗) Data1.RecordSource = Select * From 基本情况 Where 专业 = & mzy & Data1.Refresh If Data1.Recordset.Eof Then MsgBox 无此专业!, , 提示 Data1.RecordSource = 基本情况 Dat

42、a1.Refresh End IfEnd Sub 55Private Sub Data1_Validate(Action As Integer, Save As Integer) If Text1.Text = And (Action = 6 Or Text1.DataChanged) Then MsgBox 数据不完整,必须要有学号! Data1.UpdateControls End If If Action = 1 And Action = 4 Then Command1.Caption = 新增 Command3.Caption = 修改 Command1.Enabled = True

43、Command2.Enabled = True Command3.Enabled = True Command4.Enabled = False End IfEnd Sub 569.4 ADO数据控件9.4.1 ADO对象模型 图9-12 ADO对象模型 57表9-6 ADO对象描述对象名描述Connection连接数据来源Command从数据源获取所需数据的命令信息Recordset所获得的一组记录组成的记录集Error在访问数据时,由数据源所返回的错误信息Parameter与命令对象有关的参数Field包含了记录集中某个字段的信息 589.4.2 使用ADO数据控件在使用ADO数据控件前,

44、必须先通过“工程”“部件”命令选择“Microsoft ADO Data Control 6.0(OLEDB)”选项,将ADO数据控件添加到工具箱。ADO数据控件与Visual Basic的内部Data控件很相似,它允许使用ADO数据控件的基本属性快速地创建与数据库的连接。 1ADO数据控件的基本属性(1) ConnectionString属性ADO控件没有DatabaseName属性,它使用ConnectionString属性与数据库建立连接。该属性包含了用于与数据源建立连接的相关信息,ConnectionString属性带有4个参数,见表9-7。 59表9-7 ConnectionStri

45、ng属性参数参数描述Provide指定数据源的名称FileName指定数据源所对应的文件名RemoteProvide在远程数据服务器打开一个客户端时所用的数据源名称RemoteServer在远程数据服务器打开一个主机端时所用的数据源名称 60(2) RecordSource属性RecordSource属性确定具体可访问的数据,这些数据构成记录集对象Recordset。该属性值可以是数据库中的单个表名,一个存储查询,也可以是使用SQL查询语言的一个查询字符串。(3) ConnectionTimeout属性该属性用于数据连接的超时设置,若在指定时间内连接不成功则显示超时信息。(4) MaxReco

46、rds属性该属性定义从一个查询中最多能返回的记录数 612ADO数据控件的方法和事件ADO数据控件的方法和事件与Data控件的方法和事件完全一样。3设置ADO数据控件的属性下面通过使用ADO数据控件连接student.mdb数据库来说明ADO数据控件属性的设置。步骤1:在窗体上放置ADO数据控件,控件名采用默认名Adodcl。步骤2:单击ADO控件属性窗口中的ConnectionString属性右边的“”按钮,弹出“属性页”对话框。在该对话框中允许通过三种不同的方式连接数据源。“使用连接字符串”只需要单击“生成”按钮,通过选项设置自动产生连接字符串。“使用Data Link文件”表示通过一个连

47、接文件来完成。“使用ODBC数据资源名称”可以通过下拉列表框,选择某个创建好的数据源名称(DSN),作为数据来源对远程数据库进行控制。 62步骤步骤3:采用:采用“使用连接字符串使用连接字符串”方式连接数据源。方式连接数据源。单击单击“生成生成”按钮,打开按钮,打开“数据链接属性数据链接属性”对话框。对话框。在在“提供者提供者”选项卡内选择一个合适的选项卡内选择一个合适的OLE DB数数据源,据源,student.mdb是是Access数据库,选择数据库,选择“Microsoft Jet 3.51 OLE DB Provider”选项。然选项。然后单击后单击“下一步下一步”按钮或打开按钮或打开

48、“连接连接”选项卡,在选项卡,在对话框内指定数据库文件,这里为对话框内指定数据库文件,这里为student.mdb。为保证连接有效,可单击为保证连接有效,可单击“连接连接”选项卡右下方的选项卡右下方的“测试连接测试连接”按钮,如果测试成功则关闭按钮,如果测试成功则关闭ConnectionString属性页。属性页。步骤步骤4:单击:单击ADO控件属性窗口中的控件属性窗口中的RecordSource属性右边的属性右边的“”按钮,弹出记录源属性页对话框。按钮,弹出记录源属性页对话框。 639.5 VB中SQL的实现例9.8 将例9.5中的查找功能改用SQL语句处理,显示某专业的学生记录 Priva

49、te Sub Command5_Click( ) Dim mzy As String mzy = InputBox$(请输入专业, 查找窗) Data1.RecordSource = Select * From 基本情况 Where 专业 = & mzy & Data1.Refresh If Data1.Recordset.Eof Then MsgBox 无此专业!, , 提示 Data1.RecordSource = 基本情况 Data1.Refresh End IfEnd Sub 64Private Sub Command5_Click( ) Dim mzy As Stri

50、ng mzy = InputBox$(请输入专业, 查找窗) Data1.RecordSource = Select * From 基本情况 Where 专业 like * & mzy & * Data1.Refresh If Data1.Recordset.Eof Then MsgBox 无此专业!, , 提示 Data1.RecordSource = 基本情况 Data1.Refresh End IfEnd Sub 65例9.9 用SQL语句从student.mdb数据库的两个数据表中选择数据构成记录集,并通过数据控件浏览记录集。 Private Sub Form_Load

51、( ) Data1.RecordSource = Select 基本情况.学号,基本情况.姓名,基本情况.照片,学生成绩表.课程,学生成绩表.成绩 From 学生成绩表,基本情况 Where 学生成绩表.学号=基本情况.学号End Sub注意:当From子句列出多个表时,它们出现的顺序并不重要。Select短语中字段的排列决定了所产生的记录集内每一列数据的排列顺序。为了提高可读性可以重新排序表中的字段。 66例9.10 用SQL指令按专业统计student.mdb数据库中各专业的人数,要求按图9-19所示形式输出 在窗体上放置一个Data控件和一个网格控件MSFlexGrid1。Data1的D

52、atabaseName属性指定数据库student.mdb,网格控件的DataSource=Data1。图9-19 通过数据控件浏览记录集 67“按专业统计人数”按钮的指令代码为:Private Sub Command1_Click( ) Data1.RecordSource = Select 专业,Count(*) As 人数 From 基本情况 Group By 专业 Data1.RefreshEnd Sub图图9-20 运行结果运行结果 68按平均成绩统计前5名”按钮的指令代码为:Private Sub Command2_Click( ) Data1.RecordSource = Sel

53、ect Top 5 学号,Avg(成绩) As 平均成绩 From 学生成绩表 Group By 学号 Order By Avg(成绩) Desc Data1.RefreshEnd Sub“恢复原表内容”按钮的指令代码为:Private Sub Command3_Click( ) Data1.RecordSource = 基本情况 Data1.RefreshEnd Sub 69例9.11 将例9.9中的Data控件改用ADO数据控件,用SQL语句从student.mdb数据库的两个数据表中选择数据构成记录集 将Data控件改用ADO数据控件Adodc1,各文本框的Datasource=Adod

54、c1,DataField属性分别设置为学号、姓名、课程、成绩,而字段照片绑定图形框。 图9-21 使用ADO数据控件 70即DataSource属性使用SQL语句:select 学生成绩表.*,基本情况.姓名,基本情况.照片 from 学生成绩表,基本情况 where 学生成绩表.学号=基本情况.学号例9.12 设计一个窗体,计算student.mdb数据库内学生成绩表中每个学生的平均成绩,产生姓名、平均成绩和最低成绩三项数据,按平均成绩降序排列数据,并用该数据作图。 要显示作图数据,可在窗体上放置一个网格控件,选择“工程”“部件”中的Microsoft Data Grid Control 6

55、.0 (OLEDB),设置网格的DataSource=Adodcl,将其绑定到ADO数据控件上。此例将Adodc1控件的Visible属性设为False,故在图9-21中看不到Adodc1控件。要绘制图表,可使用绑定控件MsChart。MsChart控件也是一个Active X控件,需要通过“工程”“部件”命令,将MsChart控件添加到工具箱中。要将作图数据传送到Mschart控件,只需要设置MsChart1.DataSource=Adodc1。如果只要选择部分数据作图,可以将作图数据存入数组,再设置MsChart1.Data=数组名即可。 71将Adodcl的RecordSource属性设置为SQL语句,代码如下:Select 基本情况.姓名,Avg(成绩) As 平均成绩,Min(成绩) As 最低成绩 From 学生成绩表,基本情况Where 学生成绩表.学号=基本情况.学号Group By学生成绩表.学号,基本情况.姓名 Order By Avg(成绩)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论