【文档说明】第9章ADO编程-精选课件.ppt,共(52)页,1.406 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45480.html
以下为本文档部分文字说明:
第9章ADO编程-PPT精选2第9章ADO对象和ADO编程39.1ADO的编程模型ADO(ActiveXDataObjects)是Microsoft公司最新推出的数据访问技术。它将逐步替代DAO和RDO而成为主要的数据
访问接口。1ADO编程模型的层次结构简介ADO编程模型主要由连接(Connection)、命令(Command)、记录集(Recordset)、字段(Field)、参数(Parameter)、错误(Error)和属性(Property)等
七个对象集合组成。图9-1表示了ADO对象模型的层次结构。41.ADO编程模型的层次结构52.连接对象(Connection)Connection对象代表了打开的与数据源的连接。建立与数据源的连接后,可以用Co
nnection的属性和方法来执行各种操作。如:ConnectionString属性:连接字符串,对连接进行初始化。Provider属性:指定OLEDB的提供者。Open方法:建立到数据源的物理连接。可
用Close方法将其切断。Execute方法:对连接执行的各种操作。Cancel方法:取消Open方法或Execute方法的调用。63.命令对象(Command)Command对象定义了将对数据源执行的命令,相当于一个查询。使用Command对象查询数据
库,并返回Recordset对象中的记录。命令可以在数据源中添加、删除或更改数据。常用的属性和方法如下:ActiveConnection属性:设置到数据源的连接信息。CommandText属性:指定发送的命令文本。如SQL语句、数据表名称。CommandTy
pe属性:设置或返回CommandText的类型。Execute方法:执行CommandText指定的操作。Cancel方法:取消Execute方法的调用。74.记录集对象(Recordset)描述来自数据表或命令执行结果的记录集合。Recordset对象是在行中检查和修改数据最主
要的方法。常用于指定可以检查的记录,移动记录,添加、更改或删除记录等。Recordset对象常用的属性:Source:返回或设置Recordset对象的生成方式:Command对象、SQL语句或查询名RecordCount:返回记录集中的记录总数。AbsoluteP
osition:记录指针位置(从1开始).8BOF、EOF:标志当前记录指针是否首记录之前或末记录之后。Bookmark:返回或设置Recordset对象中当前记录的书签。CursorType:返回或设置Recordset对象中使用的游标类型。Filter:设置
Recordset对象中的数据筛选条件。Sort:设置排序字段。9Recordset对象常用的方法:Open:打开代表数据表、查询结果等记录集。MoveFirst,MoveLast,MoveNext,和MovePrevious:移动记录指针到首记录,末记录
,下一个记录,上一个记录。AddNew:创建一条新的空记录。Update:保存当前记录的更改。CancelUpdate:调用Update方法之前取消对当前记录的更改。Delete:删除当前记录。Requery:重新执行生成Reco
rdset对象的查询,以更新其中数据。105.字段对象(Field)和字段集合(Fields)Field对象代表记录中的一列,Fields是Field对象的集合,描述记录中的字段的集合。Fields的主要属性和方法如下:Name属性:
字段的名称。Value属性:字段的值。Count属性:得到Fields集合中包含的Field对象的数量。Append方法:用于向Fields集合添加一个Field对象。Delete方法:用于从Fields集合中删除一个
Field对象。使用格式:Fields.DeleteFieldName其中Fields是要删除字段的Fields集合,FieldName是要删除的Field对象名。119.2使用ADO对象编程使用ADO对象编程,一般有以下几个步骤:在VB
工程中引用ADO对象库;建立与数据库的连接;创建命令;运行命令;使用记录集的属性和方法操作数据库中的数据。129.2.1引用ADO对象要在VB中使用ADO对象编程时,事先必须在工程中引用ADO对象库。在VB6.0中提供了ADO类型库——ADODB引用方法:执行菜单[工程]\
[引用]命令,在打开的引用对话框中,选中:"MicrosoftActiveXDataObjects2.6Library"单击[确定]按钮139.2.2建立与数据源的连接建立与SQLServer数据库连接的方法很多,
这里主要介绍最常用的方法,即用DSN建立连接。以前边已配置好的数据源cjgl为例,建立数据源的代码格式有以下二种。1.用Connection对象的ConnectionString属性DimcnAsNewADODB.Connection'定义连接对象变量cncn.Conn
ectionstring="DSN=cjgl;uid=sa;pwd=sa"cn.ConnectionTimeout=10cn.Open'打开连接……'其它操作数据库的代码cn.Close'关闭连接142.用Connection对象的带参数的Open方法
DimcnnAsNewADODB.Connection'定义连接对象变量cnncnn.Open"DSN=cjgl;uid=sa;pwd=sa;"'打开连接……'其它代码cnn.Close'关闭连接159.2.3创建命令及运行命令1.创建命令建立和数据源的连接后,可以先声明Comma
nd类型的对象变量,然后设置该对象变量的ActiveConnection属性指定该命令使用的连接对象,设置CommandText属性,设置命令文本字符串,则该命令对象就可以在以后的程序中使用了。以下为常见的代码编写格式:DimcmdAsNewADODB.
Command'声明Command对象变量Setcmd.ActiveConnection=cn'指定该命令使用的连接对象cmd.CommandText=―Select*From教师信息表”……'其它代码162.运行命令运行命令以返回Recordset集合。可以用Connection
.Excute、Command.Excute、Recordset.Open这三种方法运行命令,它们的完整语法格式如下:Connection.Excute(CommandText,RecordsAffected,
Options)Command.Excute(RecordsAffected,Parameters,Options)Recordset.OpenSource,ActiveConnection,CursorType,LockType,Options17
以下代码用Recordset的Open方法运行命令cmd。DimrsAsNewADODB.Recordsetrs.CursorLocation=adUseClient'使用本地游标库提供的客户端
游标rs.Opencmd,adOpenStatic,adLockBatchOptimistic……189.2.4用代码访问ADO对象用代码访问ADO对象,通过操作ADO对象的方法和设置其属性,可实现对数据库的访问和控制。访问ADO对象时,一般先声明对象变量,然后建立该对象的引
用,程序执行完,最后应释放对象变量。如:DimcnAsNewADODB.Connection'声明Connection对象变量cn.Open"DSN=cjgl;uid=sa;pwd=sa;"……S
etcn=Nothing'释放对象变量19使用ADO对象时,可以通过对象的Index属性或Name属性建立对对象的访问。如访问Recordset的Fields对象的语法格式有以下几种:DimrstAsNewADODB.Record
setrst.Fields(Index)'使用索引号访问字段,Index=0表示第一个字段(第一列)rst.Fields("FieldName")'使用对象名rst.Fields.Item(Index)rst.Fields.
Item("FieldName")rst.Fields![FieldName]'使用对象名20如下面的代码中,分别用Fields对象的Index属性或Name属性来引用字段:DimrstAsNewADO
DB.RecordsetText1.Text=rst.Fields(0)Text1.Text=rst.Fields(―学号”)Text1.Text=rst.Fields.Item(0)Text1.Text=rst.Fields.Item(―学号”)Text1.Text=
rst.Fields![学号]以上几个对记录集中的字段进行操作的语句的功能是相同的,即将“学号”字段的数据项显示到文本框Text1中。219.3ADO编程应用举例例9-1打开一个连接后,创建并运行命令,将教师信息表中部分记录集中的部分字段打印到窗体上。要求只显示男教师的姓名、性别、单位。
设计过程如下:(1).新建工程,在窗体中添加一个命令钮(界面如图)。设置命令钮的属性:Name:Cmd1,Caption:"显示数据"22(2).配置ODBC数据源:将SQLServer数据库“成绩管理”,配置ODBC数据源,名称:―cjgl",(3
).引用ADO对象:在VB工程中,执行菜单[工程]\[引用],选中"MicrosoftActiveXDataObjects2.6Library"(4).编写代码:‘在窗体的(通用)(声明)段,声明以下对象变量:DimcnAsNewADODB.ConnectionDimcmdAs
NewADODB.CommandDimrstAsNewADODB.Recordset23PrivateSubCmd1_Click()DimiAsIntegercn.Open"DSN=cjgl;uid=sa;pwd=sa;"'建立数据源连接Set
cmd.ActiveConnection=cn'创建命令cmd.CommandText="Select*From教师信息表"'设置作为命令文本的SQL语句cmd.CommandType=adCmdText'设置命令类型c
n.CursorLocation=adUseClientrst.Opencmd'运行cmd命令产生记录集24'使用记录集对象:rst.Sort="姓名"'按姓名字段排序rst.Filter="性别='男'"rst
.MoveFirstPrint"姓名"&"性别"&"单位"PrintFori=0Torst.RecordCount-1Printrst.Fields("姓名")&""&rst.Fields("性别")&""
&rst.Fields("单位")rst.MoveNextNexticn.Close'释放各对象变量:Setrst=NothingSetcmd=NothingSetcn=NothingEndSub图9-3例9-1的运行结果25例9-2设计教师信息表数据编辑窗体。
(1)新建工程。(2)引用ADO对象:执行菜单:[工程]\[引用],选中"MicrosoftActiveXDataObjects2.6Library"(3)配置数据源与例9-1用同一个数据源:cjgl,所以不必重新配置。(4)设计界面如图9-4。建立标签Label1和文本
框Text1控件数组,标签数组用来显示教师信息表的字段名,Text1数组用来显示或输入、修改表中的数据。用Text2显示Recordset对象返回的当前记录号及记录总数。26图9-4例9-2设计界面图9-5例9-2运行结果27教师表的数据项如下:
教师编号姓名性别职称单位01001郑虹男副教授机械学院…………………………03004孙丽女教授信息学院Fields(0)Fields(1)Fields(4)28(5)编写程序‗在(通用)(声明)段中定
义以下窗体级变量:DimcnnAsNewADODB.ConnectionDimrstAsNewADODB.RecordsetDimcmdAsNewADODB.Command‗在(通用)(声明)段中定义R
efreshForm()通用Sub过程,用来显示当前记录集的数据:SubRefreshForm()DimiAsIntegerIfrst.EOFAndrst.BOFThen'如果记录集是空的MsgBox"空表,请添加记录",vbC
ritical,"提示"ExitSubEndIf29Fori=0To4Label1(i).Caption=rst.Fields(i).Name'将字段名称显示到标签上Ifrst.Fields(i)<>―‖Then
‗如果当前记录的第i个字段值不为空Text1(i).Text=rst.Fields(i)‗将当前记录显示到文本框中ElseText1(i)=""EndIfText1(i).Locked=True'锁住文本框,不允许编辑
Nexti'显示当前记录的位置/记录总数:Text2.Text="记录:"&rst.AbsolutePosition&"/"&rst.RecordCountEndSub30PrivateSubForm_Load(
)DimsAsStrings="DSN=cjgl;uid=sa;pwd=sa"cnn.Opens'打开连接cnn.CursorLocation=adUseClientrst.Open"Select*From教师信息表",cnnCallRefreshForm'调用RefreshForm
过程,显示记录集数据EndSub31窗体中添加了4个命令钮,Name分别为:cmdFirst,cmdPrevious,cmdNext,cmdLastCaption分别为:|<、<、>、>|。编程如下:PrivateSubcmdFirst_Click()rst.MoveFirstCal
lRefreshFormEndSubPrivateSubcmdPrevious_Click()rst.MovePreviousIfrst.BOFThenrst.MoveFirstCallRefreshFo
rmEndSub32PrivateSubcmdNext_Click()rst.MoveNextIfrst.EOFThenrst.MoveLastCallRefreshFormEndSubPrivateSubcmdLast_Click()rst.MoveLastCa
llRefreshFormEndSub33窗体的右边放了4个命令钮,Name分别为:cmdAdd,cmdSave,cmdDel,CmdEdit,cmdCloseCaption分别为:增加、保存、删除、修改、退出Pri
vateSubcmdAdd_Click()Text2.Text="新增记录"Fori=0To4Text1(i).Locked=False'开锁Text1(i).Text=""'清空文本框NextiText1(0).SetFocus'设置焦点
rst.AddNewEndSub34PrivateSubcmdSave_Click()DimiAsIntegerFori=0To4rst.Fields(i)=Text1(i)'写入数据库Nextirst.Update'更新数据库CallRefreshFormEndSubPr
ivateSubCmdEdit_Click()‗单击[修改]按钮Fori=0To4Text1(i).Locked=False'开锁NextiEndSub35PrivateSubcmdDel_Click()rst.Deleterst.MoveNex
tIfrst.EOFThenrst.MoveLastCallRefreshFormEndSubPrivateSubcmdClose_Click()UnloadMeEndSub36图9-6登录窗体例9-3在例9-2工程中
,设计一个登录窗体,用ADO编程实现登录窗体的功能。(1)设计窗体在例9-2工程中添加窗体作为登录窗体:执行菜单[工程]\[添加窗体]设置该窗体属性Name:frmPasswordMaxButton:False(无最大化按钮)Ca
ption:登录MinButton:False(无最小化按钮)添加控件如图9-63738(3)设计代码DimcnAsNewADODB.ConnectionDimrstAsNewADODB.RecordsetPrivateSubForm_Load()DimsAsStrings="DSN
=cjgl;uid=sa;pwd=sa"cn.Opens'打开连接cn.CursorLocation=adUseClientEndSub39PrivateSubcmdOK_Click()rst.Open"Select*From
密码表where用户名='"&Text1.Text&"'",cn'打开记录集Ifrst.BOFAndrst.EOFThenMsgBox"无效用户名,请重新输入。",vbCritical,"错误"Text1=""Text1.SetFocusElseIfText2=rst
.Fields("密码")Then'检测密码MsgBox"登录成功!",vbInformationForm1.ShowMe.Hide40ElseMsgBox"密码错误,请重新输入",vbCritical,"错误"Text2.Text=""'
清空密码输入框Text2.SetFocusEndIfrst.Close'关闭记录集EndSubPrivateSubcmdCancel_Click()UnloadMeEndSub41例9-4用MSFlexG
rid控件显示教师信息表的所有记录。(1)设计界面MSFlexGrid控件属于ActiveX控件,不在标准工具箱中。执行菜单[工程]\[部件]命令,选择:"MicrosoftFlexGridControl6.0",将MSF
lexGrid控件添加到工具箱中。在窗体上添加一个MSFlexGrid控件,属性:名称:MSG1,Font:五号、粗体添加一个按钮,属性如下:名称:CmdDisplay,Caption:显示42图9-7MSF
lexGrid控件显示教师信息表43(2)设计代码定义一个通用Sub过程,名为ShowGrid,实现将记录集的内容显示到MSFlexGrid控件中。过程的头部定义为:SubShowGrid(RsAsADODB.Recordset,MSAsMSFlexGrid)ShowGrid
过程有两个形参,其中Rs为Recordset对象变量,MS为MSFlexGrid控件类型变量,因此在调用该过程时,应注意实参的类型要与形参类型匹配,即传递给形参Rs的实参应该是Recordset对象变量,传递给形参MS的实参应该是MSFlexGrid控件的名称。以下是ShowGrid过程的代
码。44SubShowGrid(RsAsADODB.Recordset,MSAsMSFlexGrid)DimjAsIntegerRowNum=1MS.Rows=RowNum'设置MS控件的行数MS.Cols=Rs.Field
s.Count'用记录集的字段数设置MSFlexGrid控件的列数Forj=0ToRs.Fields.Count-1MS.TextMatrix(0,j)=Rs.Fields(j).Name‗将记录集的各字段名显示到网格控件
的第1行Nextj45DoWhileNotRs.EOF'当没有到记录集尾时RowNum=RowNum+1MS.Rows=RowNum'设置网格控件的行数Forj=0ToRs.Fields.Count–1MS.TextMatrix(RowNum
-1,j)=Rs.Fields(j)'将当前行记录的各字段值显示到控件中NextjRs.MoveNext'记录指针移到下一条记录上LoopEndSub46DimcnAsNewADODB.ConnectionDimrstAsNewADODB.RecordsetPriv
ateSubCmdDisplay_Click()DimsAsStrings="DSN=cjgl;uid=sa;pwd=sa"cn.Opens'打开连接cn.CursorLocation=adUseClientrst.Open"Select*From教师信息表",cn'打开教师信息
表产生记录集CallShowGrid(rst,MSG1)'调用ShowGrid过程,将rst记录集数据显示到MSG1控件中cn.Close'关闭数据库连接Setrst=Nothing'释放各对象变量Setcmd=NothingSetcn=NothingEn
dSub47例9-5设计教师信息的查询窗体输入要查询的姓名,或只输入姓,单击[查询]按钮,可在下边的网格控件中显示查询的结果。(1)设计界面如图9-8所示,在窗体上添加一个MSFlexGrid控件,名称:MSG
2,Font:五号、粗体添加一个按钮,名称:CmdQuery,Caption:查询添加一个文本框,名称:Text1添加一个标签,名称:Label1,Caption:输入姓名图9-8查询窗体运行结果48(
2)设计代码DimcnAsNewADODB.ConnectionDimrstAsNewADODB.RecordsetDimcmdAsNewADODB.CommandPrivateSubCmdQuery_Click()DimsqlstrAsStringDimsAsStrings="
DSN=cjgl;uid=sa;pwd=sa"cn.Opens'打开连接cn.CursorLocation=adUseClientsqlstr="select*from教师信息表where姓名Like'"&Text1&"%'"
Setcmd.ActiveConnection=cn'创建命令cmd.CommandText=sqlstr49cmd.CommandType=adCmdTextSetrst=cmd.Execute'运行cmd命令产生记
录集,此处也可用rst.OpencmdCallShowGrid(rst,MSG2)'调用通用过程显示记录集,ShowGrid过程代码与例9-4中相同cn.CloseSetrst=NothingSetcmd=NothingSet
cn=NothingEndSub运行程序,在文本框中输入姓(例如:王),单击[查询]按钮,结果在网格控件中显示姓王的教师信息,如图9-8。50本章小结ADO的编程模型,使用ADO对象编程中,介绍了引用ADO对象的方法,建立与数据源的连接的方法,创建命令及运行命令的方法,用
代码访问ADO对象的方法,最后举例讲解了ADO编程的应用,如浏览窗体和编辑窗体的设计、用网格控件显示数据的方法、查询窗体的设计。51第9章结束ACTHANKYOU!