本讲主要内容
? 触发器
? 用语句创建触发器 ( 实际触发器创建程序 )
? 用企业管理器来创建触发器
? 触发器与事务处理
? SQL server与 VB( ODBC, RDO )
? ODBC( ODBC体系结构, ODBC数据源配
置的步骤 )
? RDO( RDO对象模型, VB有关 RDO的引
用, VB有关 RDO的声明, VB有关 RDO的
操作, 例 1,例 2,例 3)
第九章
SQ
L
se
rv
er


库(




触发器 (第 9章第 2讲)
严格地说,触发器( TRIGGER) 是数据库表中的数
据修改时数据库管理系统应同时执行的 SQL语句的集合。
当用户发布对指定的表中记录进行修改(包括插入、删除、
更新)的命令时(事件发生),SQL server将自动执行在
相应触发器中的 SQL语言。
触发器的作用就是保持数据的 完整性 和 一致性 。
用 语句 和 SQL Enterprise Manager管理工具 都可创建
触发器。
用语句创建触发器 (第 9章第 2讲)
? 用 CREATE TRIGGE语句 创建 触发器的语句格式为,
CREATE TRIGGE 触发器名 ON 表名 FOR 操作 AS执行语句
这里触发器名是用户自定义的,表名是 SQL server数据库种存在的数
据表,操作有三种,INSERT,DEETE,UPDATE,执行语句可以是
一个也可以是多个 SQL语句。
? 使用触发器可提高数据库的效能。对于触发器应注意以下几点,
① 触发器与数据表是相关联的。当数据表被删除后,任何与该数据表相
关的触发器,也会同样被删除。
② 一个数据表的一种操作,只能有一个触发器 。 一个表最多有三个触发
器,即 insert触发器,Delete触发器和 Update触发器。一个触发器可以
含有二或三种操作。
③ 用语句可 删除 触发器。格式为,
DROP 触发器名
实际触发器创建程序 (第 9章第 2讲)
? 下面是一个实际触发器创建程序。
CREATE TRIGGE trg-xiaoshou ON xiaoshao FOR INSERT
AS
UPDATE kuchun.sl=kuchun.sl-inserted.sl
FROM kachun WHERE kuchun.SPM=inserted.spm
RETURN
? 这是一个销售表( xiaoshou)的触发器,其内容为当销售
表中插入一条销售记录时,同时库存( kuchun)表中产品
的数量要相当减少。 SPM为商品名字段,SL为数量字段。
用企业管理器创建触发器 (第 9章第 2讲)
? 使用企业管理器( Enterprise
Manger)创建触发器比使用
语句要容易。具体创建方法是:
启动 SQL Enterprise Manager
程序,选中 被操作的数据库,
在菜单中 选择 Enterprise
Manger项,进入触发器管理
界面,触发器管理界面如图所
示。
? 在触发器管理界面下,选择操
作数据表,选择触发事件
( INSERT,DELETE、
UPDATE),输入触发器名和
触发执行语句即可。
触发器与事务处理 (第 9章第 2讲)
? 在事务处理过程中使用触发器,会带来很大的方便。比如限定数据库
操作时限,限定用户操作等。
? 下面代码创建的触发器就是 限定在星期二禁止对数据表进行操作。
CREATE TRIGGE trg-xiaoshou ON xiaoshou FOR
insert,UPDATE,DELETE AS
IF Datename (dw,Get date ())=” Tuesday”
Rollback Transaction
? 如果要 阻止某一特定用户访问网络论坛 可以用触发器阻止该用户信息
进入网络论坛用户表( yonghubiao),该触发创建代码如下,
Create trigger xian Ding For insert,delete,update as
IF Exist sc select name from yonghubiao
Where name=,被阻止的用户名,
Rollback Transaction
这两个触发器都用到, Rollback Transaction”,这是, 回转回去, 语
句。
SQL server与 VB(第 9章第 2讲)
VB是通过 ODBC与 SQL server数据库建立连接,利用
远程数据对象( RDO)访问数据的。
开放式数据库连接 ( Open Data Base Connectivity)简
称 ODBC,它是微软公司于 1989年推出的 连接外部数据库
的标准 。 ODBC是应用程序与数据库之间的通信桥梁,它
支持网络系统,现成为互联网和网络信息处理系统中主要
应用技术。
RDO是 32位远程数据访问对象( Remote Data
Object)。在 Visual Basic中将 RDO作为一个对象,一个 用
于访问远程数据库数据的对象,采用 RDO进行数据库操作
的编程都是基于 RDO对象模型的。
ODBC体系结构 (第 9章第 2讲)
ODBC与应用程序、数据库之间的关系如图所示。
这里的应用程序
是用 VB或其他语
言编写的进行信
息处理的代码,
其中对数据库的
访问是通过 ODBC
建立的。
ODBC数据源是用
于描述数据库管
理系统、远程操
纵系统和网络之
间的组合方式。
ODBC数据源配置的步骤 (第 9章第 2讲)
与 SQL server数据库连接的 ODBC数据源配置的步骤如下,
第一步 单击, 开
始 → 设置 → 控制面
板 → 管理工具,,
进入控制面板管理
器,如图所示。
第二步 双击, 数
据源 (ODBC)”图标进
入 ODBC数据源管理
器,如图所示。在
ODBC数据源管理器
中,,用户 DSN”数
据源只适合本机用
户,,系统 DSN”数
据源适用于所有用
户,,文件 DSN”数
据源允许用户连接
到数据提供程序。
第三步, 系统 DSN”
选项卡如图,在
,系统 DSN”选项卡
中,,按, 添加,
进入, 创建新数据
源, 界面,,创建
数据源, 界面如图。
第四步 在创建新数
据源界面中选择
,SQL Server”选项,
单击, 完成, 钮,进
入 SQL Server DSN
配置界面,SQL
Server DSN配置( 1)
如图。
第五步 在 SQL
Server DSN 配置界
面上正确输入 数据源
名称 和 服务器,单击
,下一步, 钮,进入
数据库, 登录 ID”和
,密码, 输入界面,
SQL Server DSN配置
( 2)如图。
第六步 正确输入
,登录 ID” 和, 密码,
后,按, 下一步,,
进入 数据库选择界面,
SQL Server DSN配置
( 3)如图。
第七步 正确选择数
据库后,单击, 下一
步,,就进入了参数
设置界面,SQL
erver DSN配置( 4)
如图。
在参数设置界面,单
击, 完成,,就进入
了 Microsoft
SQL Server安装界面,
如图。
该界面中显示的内容
为前面注册的数据。
在 ODBC Microsoft
SQL Server安装界面
下,单击, 测试数据
源,, O BC管理器就
自动测试前面配置,
并 显示测试结果,如
图 。如果测试成功,
在, SQL Server
ODBC数据源测试, 界
面上单击, 确定, 就
可完成 ODBC配置。
RDO对象模型 (第 9章第 2讲)
RDO对象包括 rdoEnvironment对象, rdoConnection
对象 以及 rdoResultset对象,其模型结构图如图。
rdoEnvironment对象
用于建立一个 RDO支
持环境
rdoConnection对象
用于建立一个 RDO连

rdoResultset对象负
责存储对远程数据库
操作后的结果集
VB有关 RDO的引用 (第 9章第 2讲)
要使用 RDO必须在 Visual Basic,引用, 对话框中设
置对 Microsoft Remote Data Object 2.0对象库的一个引用,
如图所示。
VB有关 RDO的声明 (第 9章第 2讲)
RDO在 Visual Basic编程中同样需要, 声明,,
声明的格式如下,
Dim en As rdoEnvironment
Dim cn As rdoConnection
Dim Rst as rdoResultset
这里,en声明了一个 RDO环境, cn声明了一个 RDO连
接, Rst声明了一个 结果集 ( 结果集是通过 RDO对数
据库进行操作(查询、插入、更改、删除等)后的
一个记录集 )。
VB有关 RDO的操作 (第 9章第 2讲)
① 建立一个 RDO环境
Set en = rdoEnvironments(0)
② 关闭一个 RDO环境
en.Close
③ 建立一个 RDO连接
Set cn = en.OpenConnection("aaa",rdDriverNoPrompt,False,
"odbc;uid = bbb; pwd=ccc")
这里:, aaa” 是数据源名,” bbb” 是登录数据库的 ID,” ccc” 是登录
数据库的 Password。
④ 关闭一个 RDO连接
cn.Close
⑤ 打开一个结果集
Set Rst = cn.OpenResultset(Name:=Sql,Type:=rdOpenDynamic,
LockType,= rdConcurRowVer)
⑥ 关闭一个结果集
Rst.Close
Private Sub Get_ZF()
Dim SQL,kkk As String
Dim i As Integer
i = 0
kkk = "计算机信息管理基础 "
SQL = "select cj,km from cjb km=’"kkk "’"
Set Rst = cn.OpenResultset(Name,= SQL,Tyre,= rdOpenDynamic,LockType,=
rdConcurRowVer)
Do While Not Rst.EOF
i = i + Rst("cj")
Loop
Rst.Close
Label1.Caption = kkk + "总分为 " + Str(i)
End Sub
例 1(第 9章第 2讲)
这是一个从学生成绩表( cjb)
中计算出, 计算机信息管理基础,
课程考试总分的程序。
Private Sub Update_xx()
On Error GoTo EEEEE
Dim SQL As String
Dim KmKm As String
Dim xhxh As String
KmKm = "计算机信息处理基础 "
xhxh = "20040102002"
SQL = "Select * from cjb where km='" & KmKm & " and xh='" & xhxh & "'"
Set Rst = cn.rdoResultset(Name:=SQL,Type:=rdOpenDynamic,LockType,= rdConcurRowVer)
Rst("cj") = 85
Rst.Update
Rst.Close
MsgBox ("成绩已更改 ! ")
Exit Sub
EEEEE,
MsgBox ("没有该学生成绩,无法更改 !")
End Sub
例 2(第 9章第 2讲)
下面这段程序用于修改学号为
,20040102002” 的, 计算机信息管
理基础, 课程的考试成绩。
Private Sub Delete_xx()
On Error GoTo EEEEE
Dim SQL As String
Dim kmkm As String
Dim xhxh As String
kmkm = "计算机信息管理基础 "
xhxh = "20040102002"
SQL = "Select * from cjb where Km='" & kmkm & " and xh='" & xhxh & "'"
Set Rst = cn.rdoResultset(Name:=SQL,Type:=rdOpenDynamic,LockType,= rdConcurRowVer)
If Not Rst.EOF Then
Rst.Delete
End If
Rst.Close
MsgBox ("成绩已删除 ! ")
Exit Sub
EEEEE,
End Sub
例 3(第 9章第 2讲)
下面这段程序用于删除学号为
,20040102002” 的学生, 计算机信
息管理基础, 课程的成绩,其程序
可编写如下:。