Visual Basic 程序设计教程 第十五讲 VB数据库应用(2) 本章教学内容 8.1 数据库基本知识 8.2 Data控件 8.3 ADODC控件 8.4 ADO对象模型 8.5 数据窗体向导 8.6 数据环境设计器 8.7 数据报表Data Report.

Download Report

Transcript Visual Basic 程序设计教程 第十五讲 VB数据库应用(2) 本章教学内容 8.1 数据库基本知识 8.2 Data控件 8.3 ADODC控件 8.4 ADO对象模型 8.5 数据窗体向导 8.6 数据环境设计器 8.7 数据报表Data Report.

Slide 1

Visual Basic
程序设计教程


Slide 2

第十五讲

VB数据库应用(2)


Slide 3

本章教学内容
8.1 数据库基本知识
8.2 Data控件
8.3 ADODC控件
8.4 ADO对象模型
8.5 数据窗体向导
8.6 数据环境设计器
8.7 数据报表Data Report


Slide 4

本讲教学内容
8.3 ADODC控件
8.4 ADO对象模型


Slide 5

8.3 ADODC控件
1. ADODC控件的特点
(1)在VB中,用户可使用三种数据访问接口,即
ActiveX数据对象(ADO)、数据访问对象
(DAO)和远程数据对象(RDO),这三种接口
代表了数据访问技术的三个发展时代,其中最新
的是ADO。
(2) ADO(Active Data Objects)实际是上一种
提供访问各种数据类型的连接机制。它是DAO/
RDO的后继产物,ADO是为Microsoft的数据访问
OLE DB而设计的,OLE DB是一个低层的数据访
问接口,通过它可以访问各种数据源,这些数据
源包括关系和非关系数据库、文本文件和图形等


Slide 6

(3) ADODC控件(又称为ADO Data Control或
ADO Data 控 件 ) 可 以 利 用 Microsoft ActiveX
Data Objects数据对象(ADO)快速建立数据绑
定控件和数据提供者之间的连接。数据提供者可
以是任何符合OLE DB规范的数据源。ADODC控
件和Data控件在概念上很相似,都可以将一个数
据源连接到一个数据绑定控件,也都有相同的外
观共四个按钮。但是,相比较来说ADODC更加灵
活,适应性更广。


Slide 7

2. ADODC控件的创建方法
当新建一个工程时,ADODC控件不在工具箱
中,需要打开菜单“工程”---“部件…”对话框
选 择 “ Microsoft ADO Data Control 6.0
(OLEDB)”复选框,向工具箱中添加ADODC
控 件 的 图 标 。 将 ADODC 控 件 放 置 到 窗 体 中 ,
ADODC控件的外观如下图所示,默认控件名为
“Adodc1”。


Slide 8

3. ADODC控件的常用属性
⑴ ConnectionString属性
ConnectionString属性是一个字符串,用来连接
到数据源。可以是OLE DB文件(.UDL)、
ODBC数据源(.DSN)或连接字符串,如下图所
示。


Slide 9

为了能设置好所需的ConnectionString属性,
必须知道如何去创建一个Microsoft数据连接文件(Data
Link file)(.UDL),如何创建ODBC 数据源以及如何使用
连接字符串。
创建Data Link文件的步骤:
①打开Windows资源管理器,本文用的是Windows XP
操作系统。
②打开存放OLE DB文件(.udl)的文件夹,例如选择
“D:\”来存放。
③在Windows资源管理器窗口右边空白处单击鼠标右键,
从快捷菜单中选择“新建文本文件”,将文件名改为
“myDatalink.udl”,新建一个udl文件,此时屏幕上会弹
出一个对话框告之“如果改变文件扩展名,可能会导致文
件不可用,确实要更改吗?”,单击“是”,确定即可。


Slide 10

④用鼠标双击“myDatalink.udl”文件,打开数
据连接属性,如下图所示。


Slide 11

⑤单击“提供程序”选项卡,在OLE DB
提供程序中选择“Microsoft Jet 3.51 OLE DB
Provider”,如果已有的数据库是Access2000的
格 式 , 则 选 择 “ Microsoft Jet 4.0 OLE DB
Provider”,如下图所示,然后单击“下一步”按
钮。


Slide 12

⑥选择或输入数据库名称,本例题的数据
库放在D:\VB\supermarket.mdb下。
⑦单击“测试连接”按钮,如果数据连接成功,
将会弹出测试连接成功对话框,如下图所示。


Slide 13

ODBC数据源名称(DSN),表示了将应用程序和
某个数据库相连接的信息集合。
ODBC驱动器管理程序使用该信息创建一个到
数据库的连接。根据操作系统的不同,这些信息
被保存在ODBC.ini文件或者是系统注册表中。用
户可以使用Windows控制面板的ODBC管理工具
来创建DSN。


Slide 14

在Windows Xp操作系统中创建DSN步骤:
①单击任务栏上的“开始”---“设置”,再单击“控制面
板”,在弹出的界面中再双击“管理工具”,然后双击
“数据源(ODBC)”,弹出如下图所示界面。


Slide 15

②单击“添加…”按钮,选择想安装的数
据源的驱动程序。这里选择“Microsoft Access
Driver(*.mdb)”。如下图所示。


Slide 16

③单击“完成”按钮将会弹出如下图所示
界面,在数据源名中,给所连接的数据源起一个
名称。然后单击“选择(S)…”按钮,选择具体
数据库,这里选择的是D:\VB\supermarket.mdb。


Slide 17

单击“确定”按钮,将回到ODBC数据源
管理器中,此时您将看到刚才所定义的数据源名
称my-database出现在列表中,如下图所示。说
明成功地创建了一个ODBC数据源
④最后单击“确定”按钮,完成创建ODBC数据源。


Slide 18

下面进一步设置ConnectionString属性。在设置
ConnectionString属性的对话框,选择“使用
Data Link文件”选项,通过“浏览…”选择前面
所建立的数据连接文件,D:\myDatalink.udl即可,
如下图所示。


Slide 19

也可以选择“使用ODBC数据源名称”,
在其下拉列表中选择前面刚建立的数据源mydatabase,如下图所示。如果事先没有建立好所
需的ODBC数据源名称,此处也可以通过单击右边
的“新建”按钮来建立。


Slide 20

⑵ RecordSource属性
该属性返回或设置一个记录集的查询,用于决定
从数据库中查询什么信息。在Adodc1的属性窗口
中单击RecordSource右侧的按钮,则显示如下图
所示的属性页。


Slide 21

若选择“命令类型”为“2-adCmdTable”,则设
置一个表或存储过程名为记录源;单击“表或存
储过程名称”的下拉列表中选择“provider”表,
然后单击“确定”按钮,Adode1控件就连接到
“supermarket.mdb”的“provider”表。


Slide 22

⑶ UserName属性
UserName属性是用户名称,当数据库受密码保护
时,需要指定该属性。这个属性也可在设置
ConnectionString属性时设置。
⑷ Password属性
Password属性设置ADO Recordset对象创建过
程中所使用的口令,当访问一个受保护的数据库
时是必须的。该属性设置值是只写的,它只能在
代码中提供,而不能从Password属性中读出。


Slide 23

利用ADODC控件连接数据库有两种方法,
具体如下。
⑴ 通过ADODC属性页实现连接
【例8-2】 本例题,没有编写代码,通过Adodc控
件和DataGrid控件的绑定在窗体Form1上显示出
数据表provider的内容。设计界面如下图所示。


Slide 24

设计步骤如下:
①新建以个工程,向窗体中添加一个Adodc1控件。
② 设 置Adodc1控 件 的ConnectionString属 性 为
使用Data Link文件D:\mydatalink.udl,如前面所
述,这里也可以选择“使用ODBC数据源名称”或
“使用连接字符串”方式。
③ 设 置 Adodc1 控 件 的 RecordSource 属 性 为 表
provider。
④ 从 “ 工 程 ” ---“ 部 件 ” 中 把 “ Microsoft
DataGrid Control 6.0(OLEDB)”添加到工具箱中,
然后向窗体中添加一个DataGrid控件。
⑤ 设 置 DataGrid1 控 件 的 DataSource 属 性 为
Adodc1。


Slide 25

⑥保存该窗体和工程,运行该窗体,即可以看到
数据表provider的内容,如下图所示。


Slide 26

⑵ 通过代码实现数据连接
除了通过属性页的设置连接数据库之外,
也可以在程序运行时动态地连接数据源。下面的
例8-3是一段进行数据库连接的常用代码。
【例8-3】 本例题是一个小代码片段,功能是进行
ADODC控件的数据连接。运行界面如下图所示。


Slide 27

设计步骤如下:
①创建一个新的工程,向窗体中添加一个
Adodc1控件,一个CommandButton,并把其Caption
属性改为“测试数据连接”。
②在Command1的Click事件中输入如下的代码。
Private Sub Command1_Click()
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = "Provider=Microsoft.Jet.
Oledb.3.51;" & "Data Source=f:\supermarket.mdb;"
cn.ConnectionTimeout = 30
cn.Open
If cn.State = adStateOpen Then MsgBox "数据连接成
功!"
End Sub


Slide 28

4. ADODC控件的常用方法
⑴ UpdateControls方法
从控件的ADO Recordset对象中获取当前行,并在绑定
到此控件的控件中显示相应的数据。
⑵ AddNew方法
与Data控件的AddNew方法相同,用于添加新记录。
⑶ Update方法
与Data控件的Update方法相同,保存对Recordset 对象
的当前记录所做的所有更改。
⑷ Delete方法
Delete可用于Recordset或Field对象,分别用于删除字
段或删除记录。
语法:Fields.Delete字段名
Recordset.Delete 记录数目


Slide 29

⑸ Move方法
与Data控件的Move方法相同,用于移动
Recordset对象中当前记录的位置。
⑹ Move方法群
与Data控件的Move方法群相同,通过MoveFirst、
MoveLast、MoveNext和MovePrevious方法分
别移动到指定Recordset对象中的第一个、最后一
个、下一个或上一个记录,并使该记录成为当前
记录。
⑺ Requery方法
用于重新执行Recordset对象的查询,更新其中的
数据。


Slide 30

4. ADODC控件的常用事件
⑴ WillMove事件和MoveComplete事件
分别在Recordset的当前位置更改之前或之后触发。
在执行了Recordset对象的Open、MoveNext、
MoveLast、Move、MoveFirst、MovePrevious、
Bookmark、AddNew、Delete、Requery和
Resync方法时发生。
⑵ WillChangeField事件和
FieldChangeComplete事件
分别在对Recordset中的一个或多个Field对象值
进行修改之前或之后触发。


Slide 31

⑶WillChangeRecord事件和
RecordChangeComplete事件
分别在Recordset中的一个或多个记录(行)
更改之前或之后触发该事件。在调用
Recordset对象的Update、Delete、
CancelUpdate、AddNew、UpdateBatch和
CancelBatch方法时发生。
⑷ WillChangeRecordset事件和
RecordsetChangeComplete事件
分别在Recordset更改之前或之后触发。在调
用Recordset对象的Requery、Resync、
Close、Open和Filter方法时发生。


Slide 32

8.4 ADO对象模型
前面所述的通过Adodc控件连接并访问数据
库实际上是ADO的初级运用,可以说ADO体现了
VB访问数据库的核心技术。要使VB访问数据库的
程序设计功能进一步提高,必须要了解ADO对象
模型,进而在代码中运用这些对象,就可以游刃
有余地运用VB强大的数据库功能。ADO对象模型
如下图所示。


Slide 33

Connection
Command
Parameters

Parameter

Recordset
Fields

Errors

Field
Error


Slide 34

一、Connection对象

Connection对象是ADO对象模型中
最重要的一个对象,通过该对象建立和
数据库的连接,可以说它是ADO的源头,
只有创建了Connection对象之后,才可
以创建和使用上图中的Command对象
和Recordset对象。使用Connection对
象的一般步骤如下:


Slide 35

(1) 创建Connection对象
在ADO对象模型中,使用一种对象时,通常是先
定义然后再创建该对象的实例。创建Connection
对象的代码如下:
Dim cn As ADODB.Connection ‘定义一个
Connection类别的对象变量
Set cn = New ADODB.Connection ‘创建一个
对象实例cn
也可以将这两句代码合成为一句,下面的效果等
价于执行前面的两条语句。
Dim cn As New ADODB.Connection


Slide 36

(2) 连接Connection对象和数据源
创建了Connection对象之后,接下来就
需要指定该对象所连接的数据源。设置
Connection对象连接数据源的代码如下。
CnnStr="Provider=Microsoft.Jet.Oledb.3.51;"
& "Data Source=f:\supermarket.mdb;"
Cn.open CnnStr
(3) 打开数据表
rs.CursorLocation=adUserClient
rs.Open “provider”, cn, adOpenKeyset,
adLockPessimistic
在这里调用了Recordset对象的Open方法来打开
数据表“provider”


Slide 37

(4) 关闭Connection对象
当应用程序不再需要使用数据库时,应该调用
Connection对象的Close方法。
rs. Close
需要注意的是调用Close方法后,Connection对
象依然存在。若是想完全释放Connection对象所
占用的系统资源,必须使用如下的语句。
Set cn=Nothing
通常当用户关闭应用程序时,该应用程序所打开
的数据库将会自动关闭,并自动释放Connection
对象所占用的系统资源。


Slide 38

二、Recordset对象
Recordset 对象是一个记录集,可
以来自基本表或SQL命令执行的结果。
和前面在Data控件以及ADODC控件中
所用到Recordset是相同性质的。
在任何时候,Recordset 对象所指的
当前记录均为集合内的单个记录。
Recordset对象常用的属性如下:


Slide 39

⑴ CursorLocation属性
游标(Cursor)类似于一个的指针,通
过游标与数据库记录之间的关系,Recordset对象
可以方便地定位所要存取的记录。
CursorLocation属性用于设置或返回游标引
擎的位置。取值如下所示:
adUseClient:使用由本地游标库提供的客户端游
标。此时Recordset对象所提供的功能比设置成
AdUseServer时要多。
AdUseServer:默认值。使用数据提供者或驱动
程序提供的游标。但是,Microsoft Client
Cursor Provider(如已断开关联的记录集)的某
些功能无法由服务器端游标模拟,该设置将无法
使用这些功能。


Slide 40

(2) CursorType属性
指示在 Recordset 对象中使用的游标类型。设
置或返回以下某个CursorTypeEnum值。
AdOpenForwardOnly:仅向前游标,默认值。只能在记
录中向前滚动。当需要在记录集中单向移动时,可用于提
高性能。
AdOpenKeyset:键集游标。尽管从用户的记录集中不
能访问其他用户删除的记录,但除无法查看其他用户添加
的记录外,键集游标与动态游标相似。仍然可以看见其他
用户更改的数据。
AdOpenDynamic:动态游标。可以看见其他用户所作的
添加、更改和删除。允许在记录集中进行所有类型的移动,
但不包括提供者不支持的书签操作。
AdOpenStatic:静态游标。可以用来查找数据或生成报
告的记录集合的静态副本。另外,对其他用户所作的添加、
更改或删除不可见。


Slide 41

(3) LockType 属性
指示编辑过程中对记录使用的锁定类型。设置或
返回以下某个LockTypeEnum的值。
AdLockReadOnly:默认值,只读。无法更改数
据。
AdLockPessimistic:保守式记录锁定(逐条)。
提供者执行必要的操作确保成功编辑记录,通常
采用编辑时立即锁定数据源的记录的方式。
AdLockOptimistic:开放式记录锁定(逐条)。
提供者使用开放式锁定,只在调用Update方法时
锁定记录。


Slide 42

三、Command对象
Command对象的主要是用来执行SQL语句。
在没有Command对象的情况下,执行SQL语句的
方法有两种。
方法一:使用ADODC控件。
Adodc1.CommandType=adCmdText
Adodc1.RecordSource=SQL语句
Adodc1.Refresh


Slide 43

方法二:使用Recordset对象的Open方法。
rs.Open SQL语句 cn, adOpenDynamic,
adLockPessimistic
采用Command对象后,有第三种方法可以执行SQL语句,
即使用Command对象。
Dim cn As New ADODB.Connection ‘创建一个
Connection对象实例cn
Dim cmd As New ADODB.Command ‘创建一个
Command对象实例cmd
Dim rs As New ADODB.Recordset ‘创建一个
Recordset对象实例rs
Set cmd.ActiveConnection = cn
sSQL = “select * from provider” ‘SQL语句
cmd.CommandText = sSQL
Set rs = cmd.Execute
‘执行SQL语句的结果构成一
个记录集实例rs


Slide 44

四、Field对象
Field对象代表各字段的类型和值。每个Field
对象对应于Recordset中的一列。Recordset对象
含有由Field对象组成的Fields集合。使用Field对
象的Value属性可设置或返回当前记录的数据。读
取字段值的常用语法格式如下。
方法一:Recordset.Fields(i).Value: 存取第i个字
段的内容。参见例8-4。
方法二:Recordset.Fields(字段名称).Value:根
据字段名称来存取字段的内容。
如:Recordset.Fields(“供应商名称”).Value


Slide 45

方法三:Recordset![字段名称]
如:Recordset![供应商名称]
注意方法三中的字段名称不能用双引号括起来,
而且字段名称不能用变量代替。


Slide 46

五、Error对象
用来检测和判断在数据库操作中出现的错误,
比如连接失败等。在VB中,出现特定ADO的错误
将引发On Error事件,并且该错误将出现在Error
对象中。
在ADO中,有些对象名后多了一个"s",比如
Errors,Fields等等。添加"s"意味着这是相应对
象的集合对象,比如Errors是Error对象的集合对
象。
在了解ADO对象模型中主要对象的使用方法
后,对ADO对象的主要操作总结如下。


Slide 47

⑴ 连接到数据源。通常涉及ADO的Connection对
象。
⑵ 向 数 据 源 提 交 命 令 。 通 常 涉 及 ADO 的
Command对象。
⑶ 执行命令。比如执行一个SELECT语句。
⑷ 如果提交的命令有结果返回,这些结果将存储
在易于检查、操作或更改的缓存中。可以通过
ADO的Recordset对象对结果进行操作。
⑸ 提供错误检测。通常涉及ADO的Error对象。


Slide 48

【例8-4】 要求设置ADODC控件在程序
运行时建立和数据库supermarket.mdb的连接,
把表provider中的全部记录内容用List控件显示。
通过InputBox函数输入要查找的供应商名称,并
把结果显示在DataGrid控件中,如下图所示。


Slide 49

设计步骤如下。
①创建一个新的工程,向窗体中添加一个
Adodc1控件,两个CommandButton按钮,一个
List控件和一个DataGrid控件。每个控件的属性
设置如下表所示。
Command1

Caption为“显示供应商的全部记录”
Name为CmdAll

Command2

Caption为“显示您需要的供应商信息”

Name为CmdQuery
List1

Name为ListRecord

DataGrid1

DataSource为Adodc1


Slide 50

注意在使用ADO对象之前,先从菜单“工程”--“引用…”中引用“”Microsoft ActiveX Data
Object 2.0 Library”,这样才可以使ADO对象模
型中的 Connection, Recordset, Command,
Fields等对象可用。
②输入如下的程序代码。
③保存该窗体和工程文件。