1 / 49

第 9 章 ADO 对象和 ADO 编程

数据库编程技术. 第 9 章 ADO 对象和 ADO 编程. 9.1 ADO 的编程模型. ADO(ActiveX Data Objects) 是 Microsoft 公司最新推出的数据访问技术。它将逐步替代 DAO 和 RDO 而成为主要的数据访问接口。 1 ADO 编程模型的层次结构简介

rhona
Download Presentation

第 9 章 ADO 对象和 ADO 编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Connection Recordset Fields Properties Properties Command Parameters Properties Properties Errors Properties • 1. ADO编程模型的层次结构

  4. 2. 连接对象( Connection) • Connection对象代表了打开的与数据源的连接。 • 建立与数据源的连接后,可以用Connection的属性和方法来执行各种操作。如: • ConnectionString属性:连接字符串,对连接进行初始化。 • Provider属性:指定OLE DB的提供者。 • Open方法:建立到数据源的物理连接。可用Close方法将其切断。 • Execute方法:对连接执行的各种操作。 • Cancel方法:取消Open方法或Execute方法的调用。

  5. 3.命令对象(Command) • Command对象定义了将对数据源执行的命令,相当于一个查询。使用Command对象查询数据库,并返回Recordset对象中的记录。命令可以在数据源中添加、删除或更改数据。 • 常用的属性和方法如下: • ActiveConnection属性:设置到数据源的连接信息。 • CommandText属性:指定发送的命令文本。如SQL语句、数据表名称。 • CommandType属性:设置或返回CommandText的类型。 • Execute方法:执行CommandText指定的操作。 • Cancel方法:取消Execute方法的调用。

  6. 4.记录集对象(Recordset) • 描述来自数据表或命令执行结果的记录集合。 Recordset对象是在行中检查和修改数据最主要的方法。常用于指定可以检查的记录,移动记录,添加、更改或删除记录等。 • Recordset对象常用的属性: • Source:返回或设置Recordset对象的生成方式:Command对象、SQL语句或查询名 • RecordCount:返回记录集中的记录总数。 • AbsolutePosition: 记录指针位置(从1开始).

  7. BOF、EOF:标志当前记录指针是否首记录之前或末记录之后。BOF、EOF:标志当前记录指针是否首记录之前或末记录之后。 • Bookmark:返回或设置Recordset对象中当前记录的书签。 • CursorType:返回或设置Recordset对象中 使用的游标类型。 • Filter:设置Recordset对象中的数据筛选条件。 • Sort:设置排序字段。

  8. Recordset对象常用的方法: • Open:打开代表数据表、查询结果等记录集。 • MoveFirst, MoveLast, MoveNext,和MovePrevious:移动记录指针到首记录,末记录,下一个记录,上一个记录。 • AddNew:创建一条新的空记录。 • Update:保存当前记录的更改。 • CancelUpdate:调用Update方法之前取消对当前记录的更改。 • Delete:删除当前记录。 • Requery:重新执行生成Recordset对象的查询,以更新其中数据。

  9. 5. 字段对象(Field)和字段集合(Fields) • Field对象代表记录中的一列,Fields是Field对象的集合,描述记录中的字段的集合。 • Fields的主要属性和方法如下: • Name属性:字段的名称。 • Value属性:字段的值。 • Count属性:得到Fields集合中包含的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对象编程时,事先必须在工程中引用ADO对象库。 • 在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 ' 定义连接对象变量cn • cn. Connectionstring = "DSN= cjgl ; uid=sa ; pwd = sa" • cn. ConnectionTimeout=10 • cn.Open ' 打开连接 • … … ' 其它操作数据库的代码 • cn.Close ' 关闭连接

  13. 2.用Connection对象的带参数的Open方法 • Dim cnn As New ADODB.Connection ' 定义连接对象变量cnn • cnn.Open "DSN=cjgl; uid=sa; pwd=sa; " ' 打开连接 • … … ' 其它代码 • cnn.Close ' 关闭连接

  14. 9.2.3 创建命令及运行命令 • 1.创建命令 • 建立和数据源的连接后,可以先声明Command类型的对象变量,然后设置该对象变量的ActiveConnection属性指定该命令使用的连接对象,设置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这三种方法运行命令,它们的完整语法格式如下: • Connection.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,cn,adOpenStatic, adLockBatchOptimistic • ……

  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属性建立对对象的访问。使用ADO对象时,可以通过对象的Index属性或Name属性建立对对象的访问。 • 如访问Recordset的Fields对象的语法格式有以下几种: • 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属性来引用字段:如下面的代码中,分别用Fields对象的Index属性或Name属性来引用字段: • Dim rst As New ADODB.Recordset • Text1.Text =rst.Fields(0) • Text1.Text =rst .Fields(“学号”) • 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). 配置ODBC数据源: • 将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 Integer • cn.Open "DSN=cjgl; uid=sa; pwd=sa; " ' 建立数据源连接 • Set cmd.ActiveConnection=cn '创建命令 • cmd.CommandText = "Select * From 教师信息表" '设置作为命令文本的SQL语句 • cmd.CommandType = adCmdText '设置命令类型 • cn.CursorLocation = adUseClient • rst.Open cmd ' 运行cmd命令产生记录集

  23. 图9-3 例9-1的运行结果 • '使用记录集对象: • rst.Sort = "姓名" ' 按姓名字段排序 • rst.Filter = " 性别= '男' " • rst.MoveFirst • Print "姓名 " & "性别 " & " 单位" • Print • For i = 0 To rst.RecordCount - 1 • Print rst.Fields("姓名") & " " & rst.Fields("性别") & " " & rst.Fields("单位") • rst.MoveNext • Next i • cn.Close • '释放各对象变量: • Set rst = Nothing • Set cmd = Nothing • Set cn = Nothing • End Sub

  24. 例9-2 设计教师信息表数据编辑窗体。 • (1)新建工程。 • (2)引用ADO对象:执行菜单:[工程]\[引用],选中"Microsoft ActiveX Data Objects 2.6 Library" • (3)配置数据源 • 与例9-1用同一个数据源:cjgl , 所以不必重新配置。 • (4)设计界面如图9-4。 • 建立标签Label1和文本框Text1控件数组,标签数组用来显示教师信息表的字段名,Text1数组用来显示或输入、修改表中的数据。 • 用Text2显示Recordset对象返回的当前记录号及记录总数。

  25. 图9-5 例9-2运行结果 图9-4 例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 • ‘在(通用)(声明)段中定义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) ‘ 将当前记录显示到文本框中 • Else • Text1(i) = "" • End If • Text1(i).Locked = True '锁住文本框,不允许编辑 • Next i • '显示当前记录的位置/记录总数: • Text2.Text = "记录:" & rst.AbsolutePosition & "/" & rst.RecordCount • End Sub

  29. Private Sub Form_Load() • Dim s As String • s = "DSN=cjgl;uid=sa;pwd=sa" • cnn.Open s ' 打开连接 • cnn.CursorLocation = adUseClient • rst.Open "Select * From 教师信息表 ", cnn, adOpenDynamic, adLockOptimistic • Call RefreshForm ' 调用RefreshForm过程,显示记录集数据 • End Sub

  30. 窗体中添加了4个命令钮,Name分别为: • cmdFirst, cmdPrevious ,cmdNext, cmdLast • Caption分别为:|<、< 、> 、>|。编程如下: • Private Sub cmdFirst_Click() • rst.MoveFirst • Call RefreshForm • End Sub • Private Sub cmdPrevious_Click() • rst. MovePrevious • If rst.BOF Then rst.MoveFirst • Call RefreshForm • End Sub

  31. Private Sub cmdNext_Click() • rst. MoveNext • If rst.EOF Then rst.MoveLast • Call RefreshForm • End Sub • Private Sub cmdLast_Click() • rst.MoveLast • Call RefreshForm • End Sub

  32. 窗体的右边放了4个命令钮,Name分别为: • cmdAdd, cmdSave ,cmdDel , CmdEdit, cmdClose • Caption分别为:增加、保存、删除、修改、退出 • Private Sub cmdAdd_Click() • Dim I as integer • Text2.Text = "新增记录" • For i = 0 To 4 • Text1(i).Locked = False '开锁 • Text1(i).Text = "" ' 清空文本框 • Next i • Text1(0).SetFocus ' 设置焦点 • rst.AddNew • End Sub

  33. Private Sub cmdSave_Click() • Dim i As Integer • For i = 0 To 4 • rst.Fields(i) = Text1(i) '写入数据库 • Next i • rst.Update '更新数据库 • Call RefreshForm • End Sub • Private Sub CmdEdit_Click() ‘ 单击[修改]按钮 • For i = 0 To 4 • Text1(i).Locked = False '开锁 • Next i • End Sub

  34. Private Sub cmdDel_Click() • rst.Delete • rst.MoveNext • If rst.EOF Then rst.MoveLast • Call RefreshForm • End Sub • Private Sub cmdClose_Click() • Unload Me • End Sub

  35. 图9-6 登录窗体 例9-3 在例9-2工程中,设计一个登录窗体,用ADO编程实现登录窗体的功能。 • (1)设计窗体 • 在例9-2工程中添加窗体作为登录窗体:执行菜单 [工程]\[添加窗体] • 设置该窗体属性 • Name:frmPassword • MaxButton:False (无最大化按钮) • Caption:登录 • MinButton: False (无最小化按钮) • 添加控件如图9-6

  36. (3)设计代码 • Dim cn As New ADODB.Connection • Dim rst As New ADODB.Recordset • Private Sub Form_Load() • Dim s As String • s = "DSN=cjgl;uid=sa;pwd=sa" • cn.Open s ' 打开连接 • cn.CursorLocation = adUseClient • End Sub

  37. Private Sub cmdOK_Click() • rst.Open "Select * From 密码表 where 用户名='" & Text1.Text & "'", cn ' 打开记录集 • If rst.BOF And rst.EOF Then • MsgBox "无效用户名,请重新输入。", vbCritical, "错误" • Text1 = "" • Text1.SetFocus • ElseIf Text2 = rst.Fields("密码") Then ' 检测密码 • MsgBox "登录成功!", vbInformation • Form1.Show • Me.Hide

  38. Else • MsgBox "密码错误,请重新输入", vbCritical, "错误" • Text2.Text = " " ' 清空密码输入框 • Text2.SetFocus • End If • rst.Close ' 关闭记录集 • End Sub • Private Sub cmdCancel_Click() • Unload Me • End Sub

  39. 例9-4 用MSFlexGrid控件显示教师信息表的所有记录。 • (1)设计界面 • MSFlexGrid控件属于ActiveX控件,不在标准工具箱中。 • 执行菜单[工程]\[部件]命令,选择:"Microsoft FlexGrid Control 6.0",将MSFlexGrid控件添加到工具箱中。 • 在窗体上添加一个MSFlexGrid控件,属性: • 名称:MSG1, Font:五号、粗体 • 添加一个按钮,属性如下: • 名称:CmdDisplay , Caption :显示

  40. 图9-7 MSFlexGrid控件显示教师信息表

  41. (2)设计代码 • 定义一个通用Sub过程,名为ShowGrid,实现将记录集的内容显示到MSFlexGrid控件中。过程的头部定义为: • Sub ShowGrid(Rs As ADODB.Recordset, MS As MSFlexGrid) • ShowGrid过程有两个形参,其中Rs为Recordset对象变量,MS为MSFlexGrid控件类型变量,因此在调用该过程时,应注意实参的类型要与形参类型匹配,即传递给形参Rs的实参应该是Recordset对象变量,传递给形参MS的实参应该是MSFlexGrid控件的名称。以下是ShowGrid过程的代码。

  42. Sub ShowGrid(Rs As ADODB.Recordset, MS As MSFlexGrid) • Dim j As Integer • RowNum = 1 • MS.Rows = RowNum ' 设置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

  43. 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) ' 将当前行记录的各字段值显示到控件中 • Next j • Rs.MoveNext ' 记录指针移到下一条记录上 • Loop • End Sub

  44. Private Sub CmdDisplay_Click() • Dim cn As New ADODB.Connection • Dim rst As New ADODB.Recordset • Dim s As String • s = "DSN=cjgl;uid=sa;pwd=sa" • cn.Open s ' 打开连接 • cn.CursorLocation = adUseClient • rst.Open "Select * From 教师信息表 ", cn ' 打开教师信息表产生记录集 • Call ShowGrid (rst, MSG1) ' 调用ShowGrid过程,将rst记录集数据显示到MSG1控件中 • cn.Close ' 关闭数据库连接 • Set rst = Nothing ' 释放各对象变量 • Set cmd = Nothing • Set cn = Nothing • End Sub

  45. 图9-8 查询窗体运行结果 例9-5设计教师信息的查询窗体 • 输入要查询的姓名,或只输入姓,单击[查询]按钮,可在下边的网格控件中显示查询的结果。 • (1)设计界面 • 如图9-8所示,在窗体上添加一个MSFlexGrid控件,名称:MSG2, Font:五号、粗体 • 添加一个按钮, • 名称:CmdQuery , Caption :查询 • 添加一个文本框,名称:Text1 • 添加一个标签, • 名称:Label1, Caption :输入姓名

  46. (2)设计代码 • Dim cn As New ADODB.Connection • Dim rst As New ADODB.Recordset • Dim cmd As New ADODB.Command • Private Sub CmdQuery_Click() • Dim sqlstr As String • Dim s As String • s = "DSN=cjgl;uid=sa;pwd=sa" • cn.Open s ' 打开连接 • cn.CursorLocation = adUseClient • sqlstr = "select * from 教师信息表 where 姓名 Like ' " & Text1 & " %' " • Set cmd.ActiveConnection = cn ' 创建命令 • cmd.CommandText = sqlstr

  47. cmd.CommandType = adCmdText • Set rst = cmd.Execute • Call ShowGrid(rst, MSg2) • cn.Close • Set rst = Nothing • Set cmd = Nothing • Set cn = Nothing • End Sub

  48. 本章小结 • ADO的编程模型,使用ADO对象编程中,介绍了引用ADO对象的方法,建立与数据源的连接的方法,创建命令及运行命令的方法,用代码访问ADO对象的方法,最后举例讲解了ADO编程的应用,如浏览窗体和编辑窗体的设计、用网格控件显示数据的方法、查询窗体的设计。

  49. 第9章 结束

More Related