可以使用ADO的batchupdate功能 ,这是一些文章:2-5 BatchUpdate模式 A D O的B a t c h U p d a t e功能和B D E / I D A P I的C a c h e d U p d a t e非常类似。它的工作原 理就是当A D O从数据源取得数据之后,客户端对于所有数据的修改都暂时储存在 客户端的缓存中,而不是立刻更新回数据源中。而当客户端决定要把所有的修改 更新回数据源时,才调用A D O的方法,把所有的修改更新回数据源中。 使用B a t c h U p d a t e方法来处理数据的好处是客户端和数据源之间不会产生密切 的互动,因此可以降低数据源的负荷。此外也可以减少网络的R o u n d t r i p,这在拥 有大量客户端的应用系统中是非常有帮助的。此外由于B a t c h U p d a t e是把客户端对 于数据的修改暂时储存在客户端内存中,因此它对于数据的修改动作非常快速,只 在最后把所有的修改更新回数据源时才需要比较多的时间。不过使用B a t c h U p d a t e 也有一些问题,那就是程序员必须撰写较多的程序代码来处理数据更新错误的情形。 这是因为当客户端在修改数据时,可能已经有其他的用户改变了数据源中的数据, 因此当客户端把修改的数据更新回数据源时便可能会发生数据冲突或是错误的情 形。所以当程序员在使用B a t c h U p d a t e时,一定要搭配错误处理程序代码,才能够 撰写出安全坚固的应用程序。在本书稍后的章节中会讨论如何在A D O应用程序中 处理错误的情形。 要使用A D O的B a t c h U p d a t e功能,程序员必须在A D O E x p r e s s组件中进行一些 必要的设定,才能够让A D O进入B a t c h U p d a t e的模式。下面就是进入B a t c h U p d a t e模 式的必要设定: • 设定C u r s o r Ty p e为K e y S e t或S t a t i c。 • 设定L o c k Ty p e为B a t c h O p t i m i s t i c。 • 执行的S Q L命令必须是S e l e c t。 除此之外,C u r s o r L o c a t i o n也是程序员必须考虑的设定。虽然在M i c r o s o f t的文 件中说明, B a t c h U p d a t e可以使用S e r v e r-Side Cursor或Client-Side Cursor。但是, 如果使用B a t c h U p d a t e再搭配S e r v e r-Side Cursor ,那么不但无法使用稍后介绍的 B r i e f c a s e模型,在执行效率上也不好。这在第4章中会详细讨论。因此建议各位, 如果要使用B a t c h U p d a t e模式,那么最好使用Client-Side Cursor。因此我们可以加 入第4个步骤: 5 4 Delphi 5.x ADO/MTS/COM+高级程序设计篇 下载 • 设定C u r s o r L o c a t i o n为c l U s e C l i e n t。 当A D O进入B a t c h U p d a t e模式时,所有对于数据的修改都是暂存在客户端中。 当客户端决定把数据真正更新回数据源中时,可以调用TA D O D a t a S e t 、 TA D O Q u e r y、TA D O Ta b l e或TA D O S t o r e d P r o c组件的U p d a t e B a t c h方法。而 U p d a t e B a t c h方法接受一个参数,这个参数代表客户端要把哪些修改的数据更新回 数据源中。下面是U p d a t e B a t c h方法的原型: procedure UpdateBatch(AffectRecords: TAffectRecords = arAll); U p d a t e B a t c h方法的参数说明如下: 选项常数意义 a r C u r r e n t 只把目前记录的修改更新回数据源之中 a r F i l t e r e d 只把符合过滤条件的数据的修改更新回数据源之中 a r A l l 把所有数据的修改更新回资来源之中 a r A l l C h a p t e r s 更新所有被影响到的chapters (ADO chapters) 因此在A D O 中B a t c h U p d a t e可以让用户指明要更新的修改数据种类。而 U p d a t e B a t c h的内定参数是a r A l l,表示要把客户端所有修改的数据更新回数据源中。 A D O的B a t c h U p d a t e模式在使用上非常简单,但是功能却非常强大,而且可以衍生 出其他的应用,现在先让我们从基本的应用程序开始,说明如何使用A D O的 B a t c h U p d a t e功能。 1) 关闭D e l p h i集成开发环境中所有的项目,再建立一个新的应用程序项目。 2) 点选F i l e | N e w. . .菜单,在New Items对话框中的N e w页次中选择Data Module, 以建立一个新的数据模块。 3) 在数据模块中加入TA D O C o n n e c t i o n组件连接到数据库。在这个范例应用程 序中是使用MS SQL Server 7。 4) 在数据模块中加入TA D O D a t a S e t组件。设定它的C o n n e c t i o n属性值为步骤3 ) 的TA D O C o n n e c t i o n,C u r s o r L o c a t i o n为c l U s e C l i e n t,C u r s o r Ty p e为c l S t a t i c,再设定 L o c k Ty p e为l t B a t c h O p t i m i s t i c。最后设定它的C o m m a n d Te x t为Select * from 第2章撰写使用A D O技术的应用系统(一) 5 5 下载 e m p l o y e e,并且设定A c t i v e属性值为Tr u e以开启数据表。如图2 - 3 6所示。 图2-36 设定范例应用程序使用的TADODataSet的必要属性值 5) 点选主窗体,再点选File|Use Unit...菜单,在对话框中选择使用步骤2) 建立 的数据模块。 图2-37 在主窗体中放入两个TButton组件 5 6 Delphi 5.x ADO/MTS/COM+高级程序设计篇 下载 6) 在主窗体中放入T D a t a S o u r c e,设定它的D a t a S e t属性值为数据模块中的 TA D O D a t a S e t,再放入T D B N a v i g a t o r、T D B G r i d,并且设定它们的D a t a S o u r c e属性 值为刚才加入的T D a t a S o u r c e。 7) 在主窗体下方放入两个T B u t t o n组件。并且设定它们的C a p t i o n如图2 - 3 7所 示。 8) 双击主窗体中的U p d a t e B a t c h按钮,在它的O n C l i c k事件处理程序中撰写如 下的程序代码: p r o c e d u r e TForm1.Button1Click(Sender: TObject); b e g i n d m B a t c h U p d a t e . A D O D a t a S e t 1 . U p d a t e B a t c h ; e n d ; 上面的程序代码调用了数据模块中的TA D O D a t a S e t组件的U p d a t e B a t c h方法, 把所有客户端修改的数据更新回数据源中。 9) 在双击主窗体中的C a n c e l B a t c h按钮,在它的O n C l i c k事件处理程序中撰写 如下的程序代码: p r o c e d u r e TForm1.Button2Click(Sender: TObject); b e g i n d m B a t c h U p d a t e . A D O D a t a S e t 1 . C a n c e l B a t c h ; e n d ; 如果程序员想取消所有客户端对于数据的修改,那么可以调用TA D O D a t a S e t 等组件的C a n c e l B a t c h方法。C a n c e l B a t c h能够把客户端所有尚未更新回数据源的数 据修改恢复成原来的数值,并且释放储存修改数据的资源。 第2章撰写使用A D O技术的应用系统(一) 5 7 下载
A D O的B a t c h U p d a t e功能和B D E / I D A P I的C a c h e d U p d a t e非常类似。它的工作原
理就是当A D O从数据源取得数据之后,客户端对于所有数据的修改都暂时储存在
客户端的缓存中,而不是立刻更新回数据源中。而当客户端决定要把所有的修改
更新回数据源时,才调用A D O的方法,把所有的修改更新回数据源中。
使用B a t c h U p d a t e方法来处理数据的好处是客户端和数据源之间不会产生密切
的互动,因此可以降低数据源的负荷。此外也可以减少网络的R o u n d t r i p,这在拥
有大量客户端的应用系统中是非常有帮助的。此外由于B a t c h U p d a t e是把客户端对
于数据的修改暂时储存在客户端内存中,因此它对于数据的修改动作非常快速,只
在最后把所有的修改更新回数据源时才需要比较多的时间。不过使用B a t c h U p d a t e
也有一些问题,那就是程序员必须撰写较多的程序代码来处理数据更新错误的情形。
这是因为当客户端在修改数据时,可能已经有其他的用户改变了数据源中的数据,
因此当客户端把修改的数据更新回数据源时便可能会发生数据冲突或是错误的情
形。所以当程序员在使用B a t c h U p d a t e时,一定要搭配错误处理程序代码,才能够
撰写出安全坚固的应用程序。在本书稍后的章节中会讨论如何在A D O应用程序中
处理错误的情形。
要使用A D O的B a t c h U p d a t e功能,程序员必须在A D O E x p r e s s组件中进行一些
必要的设定,才能够让A D O进入B a t c h U p d a t e的模式。下面就是进入B a t c h U p d a t e模
式的必要设定:
• 设定C u r s o r Ty p e为K e y S e t或S t a t i c。
• 设定L o c k Ty p e为B a t c h O p t i m i s t i c。
• 执行的S Q L命令必须是S e l e c t。
除此之外,C u r s o r L o c a t i o n也是程序员必须考虑的设定。虽然在M i c r o s o f t的文
件中说明, B a t c h U p d a t e可以使用S e r v e r-Side Cursor或Client-Side Cursor。但是,
如果使用B a t c h U p d a t e再搭配S e r v e r-Side Cursor ,那么不但无法使用稍后介绍的
B r i e f c a s e模型,在执行效率上也不好。这在第4章中会详细讨论。因此建议各位,
如果要使用B a t c h U p d a t e模式,那么最好使用Client-Side Cursor。因此我们可以加
入第4个步骤:
5 4 Delphi 5.x ADO/MTS/COM+高级程序设计篇
下载
• 设定C u r s o r L o c a t i o n为c l U s e C l i e n t。
当A D O进入B a t c h U p d a t e模式时,所有对于数据的修改都是暂存在客户端中。
当客户端决定把数据真正更新回数据源中时,可以调用TA D O D a t a S e t 、
TA D O Q u e r y、TA D O Ta b l e或TA D O S t o r e d P r o c组件的U p d a t e B a t c h方法。而
U p d a t e B a t c h方法接受一个参数,这个参数代表客户端要把哪些修改的数据更新回
数据源中。下面是U p d a t e B a t c h方法的原型:
procedure UpdateBatch(AffectRecords: TAffectRecords = arAll);
U p d a t e B a t c h方法的参数说明如下:
选项常数意义
a r C u r r e n t 只把目前记录的修改更新回数据源之中
a r F i l t e r e d 只把符合过滤条件的数据的修改更新回数据源之中
a r A l l 把所有数据的修改更新回资来源之中
a r A l l C h a p t e r s 更新所有被影响到的chapters (ADO chapters)
因此在A D O 中B a t c h U p d a t e可以让用户指明要更新的修改数据种类。而
U p d a t e B a t c h的内定参数是a r A l l,表示要把客户端所有修改的数据更新回数据源中。
A D O的B a t c h U p d a t e模式在使用上非常简单,但是功能却非常强大,而且可以衍生
出其他的应用,现在先让我们从基本的应用程序开始,说明如何使用A D O的
B a t c h U p d a t e功能。
1) 关闭D e l p h i集成开发环境中所有的项目,再建立一个新的应用程序项目。
2) 点选F i l e | N e w. . .菜单,在New Items对话框中的N e w页次中选择Data Module,
以建立一个新的数据模块。
3) 在数据模块中加入TA D O C o n n e c t i o n组件连接到数据库。在这个范例应用程
序中是使用MS SQL Server 7。
4) 在数据模块中加入TA D O D a t a S e t组件。设定它的C o n n e c t i o n属性值为步骤3 )
的TA D O C o n n e c t i o n,C u r s o r L o c a t i o n为c l U s e C l i e n t,C u r s o r Ty p e为c l S t a t i c,再设定
L o c k Ty p e为l t B a t c h O p t i m i s t i c。最后设定它的C o m m a n d Te x t为Select * from
第2章撰写使用A D O技术的应用系统(一) 5 5
下载
e m p l o y e e,并且设定A c t i v e属性值为Tr u e以开启数据表。如图2 - 3 6所示。
图2-36 设定范例应用程序使用的TADODataSet的必要属性值
5) 点选主窗体,再点选File|Use Unit...菜单,在对话框中选择使用步骤2) 建立
的数据模块。
图2-37 在主窗体中放入两个TButton组件
5 6 Delphi 5.x ADO/MTS/COM+高级程序设计篇
下载
6) 在主窗体中放入T D a t a S o u r c e,设定它的D a t a S e t属性值为数据模块中的
TA D O D a t a S e t,再放入T D B N a v i g a t o r、T D B G r i d,并且设定它们的D a t a S o u r c e属性
值为刚才加入的T D a t a S o u r c e。
7) 在主窗体下方放入两个T B u t t o n组件。并且设定它们的C a p t i o n如图2 - 3 7所
示。
8) 双击主窗体中的U p d a t e B a t c h按钮,在它的O n C l i c k事件处理程序中撰写如
下的程序代码:
p r o c e d u r e TForm1.Button1Click(Sender: TObject);
b e g i n
d m B a t c h U p d a t e . A D O D a t a S e t 1 . U p d a t e B a t c h ;
e n d ;
上面的程序代码调用了数据模块中的TA D O D a t a S e t组件的U p d a t e B a t c h方法,
把所有客户端修改的数据更新回数据源中。
9) 在双击主窗体中的C a n c e l B a t c h按钮,在它的O n C l i c k事件处理程序中撰写
如下的程序代码:
p r o c e d u r e TForm1.Button2Click(Sender: TObject);
b e g i n
d m B a t c h U p d a t e . A D O D a t a S e t 1 . C a n c e l B a t c h ;
e n d ;
如果程序员想取消所有客户端对于数据的修改,那么可以调用TA D O D a t a S e t
等组件的C a n c e l B a t c h方法。C a n c e l B a t c h能够把客户端所有尚未更新回数据源的数
据修改恢复成原来的数值,并且释放储存修改数据的资源。
第2章撰写使用A D O技术的应用系统(一) 5 7
下载