第9章ADO编程.ppt

上传人:sccc 文档编号:5309193 上传时间:2023-06-24 格式:PPT 页数:50 大小:310.03KB
返回 下载 相关 举报
第9章ADO编程.ppt_第1页
第1页 / 共50页
第9章ADO编程.ppt_第2页
第2页 / 共50页
第9章ADO编程.ppt_第3页
第3页 / 共50页
第9章ADO编程.ppt_第4页
第4页 / 共50页
第9章ADO编程.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《第9章ADO编程.ppt》由会员分享,可在线阅读,更多相关《第9章ADO编程.ppt(50页珍藏版)》请在三一办公上搜索。

1、1,第9章 ADO对象和ADO编程,2,9.1 ADO的编程模型,ADO(ActiveX Data Objects)是Microsoft公司最新推出的数据访问技术。它将逐步替代DAO和RDO而成为主要的数据访问接口。1 ADO编程模型的层次结构简介ADO编程模型主要由连接(Connection)、命令(Command)、记录集(Recordset)、字段(Field)、参数(Parameter)、错误(Error)和属性(Property)等七个对象集合组成。图9-1表示了ADO对象模型的层次结构。,3,1.ADO编程模型的层次结构,4,2.连接对象(Connection),Connectio

2、n对象代表了打开的与数据源的连接。建立与数据源的连接后,可以用Connection的属性和方法来执行各种操作。如:ConnectionString属性:连接字符串,对连接进行初始化。Provider属性:指定OLE DB的提供者。Open方法:建立到数据源的物理连接。可用Close方法将其切断。Execute方法:对连接执行的各种操作。Cancel方法:取消Open方法或Execute方法的调用。,5,3.命令对象(Command),Command对象定义了将对数据源执行的命令,相当于一个查询。使用Command对象查询数据库,并返回Recordset对象中的记录。命令可以在数据源中添加、删除

3、或更改数据。常用的属性和方法如下:ActiveConnection属性:设置到数据源的连接信息。CommandText属性:指定发送的命令文本。如SQL语句、数据表名称。CommandType属性:设置或返回CommandText的类型。Execute方法:执行CommandText指定的操作。Cancel方法:取消Execute方法的调用。,6,4.记录集对象(Recordset)描述来自数据表或命令执行结果的记录集合。Recordset对象是在行中检查和修改数据最主要的方法。常用于指定可以检查的记录,移动记录,添加、更改或删除记录等。Recordset对象常用的属性:Source:返回或设

4、置Recordset对象的生成方式:Command对象、SQL语句或查询名RecordCount:返回记录集中的记录总数。AbsolutePosition:记录指针位置(从1开始).,7,BOF、EOF:标志当前记录指针是否首记录之前或末记录之后。Bookmark:返回或设置Recordset对象中当前记录的书签。CursorType:返回或设置Recordset对象中 使用的游标类型。Filter:设置Recordset对象中的数据筛选条件。Sort:设置排序字段。,8,Recordset对象常用的方法:,Open:打开代表数据表、查询结果等记录集。MoveFirst,MoveLast,Mo

5、veNext,和MovePrevious:移动记录指针到首记录,末记录,下一个记录,上一个记录。AddNew:创建一条新的空记录。Update:保存当前记录的更改。CancelUpdate:调用Update方法之前取消对当前记录的更改。Delete:删除当前记录。Requery:重新执行生成Recordset对象的查询,以更新其中数据。,9,5.字段对象(Field)和字段集合(Fields),Field对象代表记录中的一列,Fields是Field对象的集合,描述记录中的字段的集合。Fields的主要属性和方法如下:Name属性:字段的名称。Value属性:字段的值。Count属性:得到Fi

6、elds集合中包含的Field对象的数量。Append方法:用于向Fields集合添加一个Field对象。Delete方法:用于从Fields集合中删除一个Field对象。使用格式:Fields.Delete FieldName其中Fields是要删除字段的Fields集合,FieldName是要删除的Field对象名。,10,9.2 使用ADO对象编程,使用ADO对象编程,一般有以下几个步骤:在VB工程中引用ADO对象库;建立与数据库的连接;创建命令;运行命令;使用记录集的属性和方法操作数据库中的数据。,11,9.2.1 引用ADO对象,要在VB中使用ADO对象编程时,事先必须在工程中引用A

7、DO对象库。在VB6.0中提供了ADO类型库ADODB引用方法:执行菜单工程引用命令,在打开的引用对话框中,选中:Microsoft ActiveX Data Objects 2.6 Library单击确定按钮,12,9.2.2 建立与数据源的连接,建立与SQL Server数据库连接的方法很多,这里主要介绍最常用的方法,即用DSN建立连接。以前边已配置好的数据源cjgl为例,建立数据源的代码格式有以下二种。1用Connection对象的ConnectionString属性 Dim cn As New ADODB.Connection 定义连接对象变量cncn.Connectionstring

8、=DSN=cjgl;uid=sa;pwd=sa cn.ConnectionTimeout=10 cn.Open 打开连接 其它操作数据库的代码 cn.Close 关闭连接,13,2用Connection对象的带参数的Open方法 Dim cnn As New ADODB.Connection 定义连接对象变量cnncnn.Open DSN=cjgl;uid=sa;pwd=sa;打开连接 其它代码 cnn.Close 关闭连接,14,9.2.3 创建命令及运行命令,1创建命令建立和数据源的连接后,可以先声明Command类型的对象变量,然后设置该对象变量的ActiveConnection属性指定

9、该命令使用的连接对象,设置CommandText属性,设置命令文本字符串,则该命令对象就可以在以后的程序中使用了。以下为常见的代码编写格式:Dim cmd As New ADODB.Command 声明Command对象变量Set cmd.ActiveConnection=cn 指定该命令使用的连接对象cmd.CommandText=“Select*From 教师信息表”其它代码,15,2运行命令运行命令以返回Recordset集合。可以用Connection.Excute、Command.Excute、Recordset.Open这三种方法运行命令,它们的完整语法格式如下:Connectio

10、n.Excute(CommandText,RecordsAffected,Options)Command.Excute(RecordsAffected,Parameters,Options)Recordset.Open Source,ActiveConnection,CursorType,LockType,Options,16,以下代码用Recordset的Open方法运行命令cmd。Dim rs As New ADODB.Recordset rs.CursorLocation=adUseClient 使用本地游标库提供的客户端游标rs.Open cmd,adOpenStatic,adLock

11、BatchOptimistic,17,9.2.4 用代码访问ADO对象,用代码访问ADO对象,通过操作ADO对象的方法和设置其属性,可实现对数据库的访问和控制。访问ADO对象时,一般先声明对象变量,然后建立该对象的引用,程序执行完,最后应释放对象变量。如:Dim cn As New ADODB.Connection 声明Connection对象变量cn.Open DSN=cjgl;uid=sa;pwd=sa;Set cn=Nothing 释放对象变量,18,使用ADO对象时,可以通过对象的Index属性或Name属性建立对对象的访问。如访问Recordset的Fields对象的语法格式有以下几

12、种:Dim rst As New ADODB.Recordset rst.Fields(Index)使用索引号访问字段,Index=0表示第一个字段(第一列)rst.Fields(FieldName)使用对象名rst.Fields.Item(Index)rst.Fields.Item(FieldName)rst.Fields!FieldName 使用对象名,19,如下面的代码中,分别用Fields对象的Index属性或Name属性来引用字段:Dim rst As New ADODB.Recordset Text1.Text=rst.Fields(0)Text1.Text=rst.Fields(

13、“学号”)Text1.Text=rst.Fields.Item(0)Text1.Text=rst.Fields.Item(“学号”)Text1.Text=rst.Fields!学号以上几个对记录集中的字段进行操作的语句的功能是相同的,即将“学号”字段的数据项显示到文本框Text1中。,20,9.3 ADO编程应用举例,例9-1 打开一个连接后,创建并运行命令,将教师信息表中部分记录集中的部分字段打印到窗体上。要求只显示男教师的姓名、性别、单位。设计过程如下:(1).新建工程,在窗体中添加一个命令钮(界面如图)。设置命令钮的属性:Name:Cmd1,Caption:显示数据,21,(2).配置O

14、DBC数据源:将SQL Server数据库“成绩管理”,配置ODBC数据源,名称:“cjgl,(3).引用ADO对象:在VB工程中,执行菜单工程引用,选中 Microsoft ActiveX Data Objects 2.6 Library(4).编写代码:在窗体的(通用)(声明)段,声明以下对象变量:Dim cn As New ADODB.Connection Dim cmd As New ADODB.Command Dim rst As New ADODB.Recordset,22,Private Sub Cmd1_Click()Dim i As Integercn.Open DSN=cj

15、gl;uid=sa;pwd=sa;建立数据源连接Set cmd.ActiveConnection=cn 创建命令cmd.CommandText=Select*From 教师信息表 设置作为命令文本的SQL语句cmd.CommandType=adCmdText 设置命令类型cn.CursorLocation=adUseClient rst.Open cmd 运行cmd命令产生记录集,23,使用记录集对象:rst.Sort=姓名 按姓名字段排序rst.Filter=性别=男 rst.MoveFirstPrint 姓名&性别&单位PrintFor i=0 To rst.RecordCount-1 P

16、rint rst.Fields(姓名)&rst.Fields(性别)&rst.Fields(单位)rst.MoveNextNext icn.Close释放各对象变量:Set rst=NothingSet cmd=NothingSet cn=NothingEnd Sub,图9-3 例9-1的运行结果,24,例9-2 设计教师信息表数据编辑窗体。,(1)新建工程。(2)引用ADO对象:执行菜单:工程引用,选中Microsoft ActiveX Data Objects 2.6 Library(3)配置数据源与例9-1用同一个数据源:cjgl,所以不必重新配置。(4)设计界面如图9-4。建立标签La

17、bel1和文本框Text1控件数组,标签数组用来显示教师信息表的字段名,Text1数组用来显示或输入、修改表中的数据。用Text2显示Recordset对象返回的当前记录号及记录总数。,25,图9-4 例9-2设计界面,图9-5 例9-2运行结果,26,教师表的数据项如下:,Fields(0),Fields(1),Fields(4),27,(5)编写程序,在(通用)(声明)段中定义以下窗体级变量:Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim cmd As New ADODB.Command 在(通用)(声明

18、)段中定义RefreshForm()通用Sub过程,用来显示当前记录集的数据:Sub RefreshForm()Dim i As Integer If rst.EOF And rst.BOF Then 如果记录集是空的 MsgBox 空表,请添加记录,vbCritical,提示 Exit Sub End If,28,For i=0 To 4 Label1(i).Caption=rst.Fields(i).Name 将字段名称显示到标签上 If rst.Fields(i)“”Then 如果当前记录的第i个字段值不为空 Text1(i).Text=rst.Fields(i)将当前记录显示到文本框中

19、 Else Text1(i)=End If Text1(i).Locked=True 锁住文本框,不允许编辑Next i显示当前记录的位置/记录总数:Text2.Text=记录:&rst.AbsolutePosition&/&rst.RecordCountEnd Sub,29,Private Sub Form_Load()Dim s As Strings=DSN=cjgl;uid=sa;pwd=sacnn.Open s 打开连接cnn.CursorLocation=adUseClientrst.Open Select*From 教师信息表,cnnCall RefreshForm 调用Refre

20、shForm过程,显示记录集数据End Sub,30,窗体中添加了4个命令钮,Name分别为:cmdFirst,cmdPrevious,cmdNext,cmdLastCaption分别为:|、|。编程如下:Private Sub cmdFirst_Click()rst.MoveFirstCall RefreshFormEnd SubPrivate Sub cmdPrevious_Click()rst.MovePrevious If rst.BOF Then rst.MoveFirstCall RefreshFormEnd Sub,31,Private Sub cmdNext_Click()rs

21、t.MoveNext If rst.EOF Then rst.MoveLastCall RefreshFormEnd SubPrivate Sub cmdLast_Click()rst.MoveLastCall RefreshFormEnd Sub,32,窗体的右边放了4个命令钮,Name分别为:cmdAdd,cmdSave,cmdDel,CmdEdit,cmdClose Caption分别为:增加、保存、删除、修改、退出 Private Sub cmdAdd_Click()Text2.Text=新增记录For i=0 To 4Text1(i).Locked=False 开锁Text1(i).

22、Text=清空文本框Next iText1(0).SetFocus 设置焦点rst.AddNewEnd Sub,33,Private Sub cmdSave_Click()Dim i As IntegerFor i=0 To 4 rst.Fields(i)=Text1(i)写入数据库Next irst.Update 更新数据库Call RefreshFormEnd SubPrivate Sub CmdEdit_Click()单击修改按钮For i=0 To 4 Text1(i).Locked=False 开锁Next iEnd Sub,34,Private Sub cmdDel_Click()

23、rst.Delete rst.MoveNext If rst.EOF Then rst.MoveLastCall RefreshFormEnd SubPrivate Sub cmdClose_Click()Unload MeEnd Sub,35,图9-6 登录窗体,例9-3 在例9-2工程中,设计一个登录窗体,用ADO编程实现登录窗体的功能。,(1)设计窗体在例9-2工程中添加窗体作为登录窗体:执行菜单 工程添加窗体设置该窗体属性Name:frmPassword MaxButton:False(无最大化按钮)Caption:登录 MinButton:False(无最小化按钮)添加控件如图9-6

24、,36,37,(3)设计代码,Dim cn As New ADODB.ConnectionDim rst As New ADODB.RecordsetPrivate Sub Form_Load()Dim s As Strings=DSN=cjgl;uid=sa;pwd=sacn.Open s 打开连接cn.CursorLocation=adUseClientEnd Sub,38,Private Sub cmdOK_Click()rst.Open Select*From 密码表 where 用户名=&Text1.Text&,cn 打开记录集If rst.BOF And rst.EOF Then

25、MsgBox 无效用户名,请重新输入。,vbCritical,错误 Text1=Text1.SetFocusElseIf Text2=rst.Fields(密码)Then 检测密码 MsgBox 登录成功!,vbInformation Form1.Show Me.Hide,39,Else MsgBox 密码错误,请重新输入,vbCritical,错误 Text2.Text=清空密码输入框 Text2.SetFocusEnd If rst.Close 关闭记录集End SubPrivate Sub cmdCancel_Click()Unload MeEnd Sub,40,例9-4 用MSFlex

26、Grid控件显示教师信息表的所有记录。,(1)设计界面MSFlexGrid控件属于ActiveX控件,不在标准工具箱中。执行菜单工程部件命令,选择:Microsoft FlexGrid Control 6.0,将MSFlexGrid控件添加到工具箱中。在窗体上添加一个MSFlexGrid控件,属性:名称:MSG1,Font:五号、粗体添加一个按钮,属性如下:名称:CmdDisplay,Caption:显示,41,图9-7 MSFlexGrid控件显示教师信息表,42,(2)设计代码,定义一个通用Sub过程,名为ShowGrid,实现将记录集的内容显示到MSFlexGrid控件中。过程的头部定义

27、为:Sub ShowGrid(Rs As ADODB.Recordset,MS As MSFlexGrid)ShowGrid过程有两个形参,其中Rs为Recordset对象变量,MS为MSFlexGrid控件类型变量,因此在调用该过程时,应注意实参的类型要与形参类型匹配,即传递给形参Rs的实参应该是Recordset对象变量,传递给形参MS的实参应该是MSFlexGrid控件的名称。以下是ShowGrid过程的代码。,43,Sub ShowGrid(Rs As ADODB.Recordset,MS As MSFlexGrid)Dim j As IntegerRowNum=1MS.Rows=Ro

28、wNum 设置MS控件的行数MS.Cols=Rs.Fields.Count 用记录集的字段数设置MSFlexGrid控件的列数For j=0 To Rs.Fields.Count-1 MS.TextMatrix(0,j)=Rs.Fields(j).Name 将记录集的各字段名显示到网格控件的第1行Next j,44,Do While Not Rs.EOF 当没有到记录集尾时 RowNum=RowNum+1 MS.Rows=RowNum 设置网格控件的行数 For j=0 To Rs.Fields.Count 1 MS.TextMatrix(RowNum-1,j)=Rs.Fields(j)将当前

29、行记录的各字段值显示到控件中 Next jRs.MoveNext 记录指针移到下一条记录上LoopEnd Sub,45,Dim cn As New ADODB.ConnectionDim rst As New ADODB.RecordsetPrivate Sub CmdDisplay_Click()Dim s As Strings=DSN=cjgl;uid=sa;pwd=sacn.Open s 打开连接cn.CursorLocation=adUseClientrst.Open Select*From 教师信息表,cn 打开教师信息表产生记录集Call ShowGrid(rst,MSG1)调用S

30、howGrid过程,将rst记录集数据显示到MSG1控件中cn.Close 关闭数据库连接Set rst=Nothing 释放各对象变量Set cmd=NothingSet cn=NothingEnd Sub,46,例9-5设计教师信息的查询窗体,输入要查询的姓名,或只输入姓,单击查询按钮,可在下边的网格控件中显示查询的结果。(1)设计界面如图9-8所示,在窗体上添加一个MSFlexGrid控件,名称:MSG2,Font:五号、粗体添加一个按钮,名称:CmdQuery,Caption:查询添加一个文本框,名称:Text1 添加一个标签,名称:Label1,Caption:输入姓名,图9-8 查

31、询窗体运行结果,47,(2)设计代码,Dim cn As New ADODB.ConnectionDim rst As New ADODB.RecordsetDim cmd As New ADODB.CommandPrivate Sub CmdQuery_Click()Dim sqlstr As StringDim s As Strings=DSN=cjgl;uid=sa;pwd=sacn.Open s 打开连接cn.CursorLocation=adUseClientsqlstr=select*from 教师信息表 where 姓名 Like&Text1&%Set cmd.ActiveCon

32、nection=cn 创建命令cmd.CommandText=sqlstr,48,cmd.CommandType=adCmdTextSet rst=cmd.Execute 运行cmd命令产生记录集,此处也可用rst.Open cmdCall ShowGrid(rst,MSG2)调用通用过程显示记录集,ShowGrid过程代码与例9-4中相同cn.CloseSet rst=NothingSet cmd=NothingSet cn=NothingEnd Sub运行程序,在文本框中输入姓(例如:王),单击查询按钮,结果在网格控件中显示姓王的教师信息,如图9-8。,49,本章小结,ADO的编程模型,使用ADO对象编程中,介绍了引用ADO对象的方法,建立与数据源的连接的方法,创建命令及运行命令的方法,用代码访问ADO对象的方法,最后举例讲解了ADO编程的应用,如浏览窗体和编辑窗体的设计、用网格控件显示数据的方法、查询窗体的设计。,50,第9章 结束,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号