请问在ADO中如何实现类似于cachedupdate的功能?(100分)

  • 主题发起人 主题发起人 lufang
  • 开始时间 开始时间
L

lufang

Unregistered / Unconfirmed
GUEST, unregistred user!
因为我有些数据是在按提交按钮后才能加入的,但在DBGRID中每移动一次就要POST,就要出错
我能不能先行写入,最后再一次commit若干条记录?
 
我给你贴一段李维书上的内容吧。
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)
 
接受答案了.
 
后退
顶部