如果在ADO中使用BATCHUPDATE模式,我更新时部分数据已经被其他用户修改过了,怎么办?(300分)

  • 主题发起人 主题发起人 zbsfg
  • 开始时间 开始时间
Z

zbsfg

Unregistered / Unconfirmed
GUEST, unregistred user!
如果在ADO中使用BATCHUPDATE模式,我更新时部分数据已经被其他用户修改过了,那我
只能rollbacktrans,但我希望能使用户知道哪些数据可以正确被更新,哪些数据不能够
更新了?就是说记录修改正确的我想不要做重复工作了。
另外:如何使用户知道那些被其他用户修改过的记录。
 
你修改前,应该锁定该表,
或者你修改前,刷新数据集,判断一下是否需要修改,如果确实
要修改,就锁定该表,不允许其它的用户同时修改。
 
采用缓存模式,就是为了减少网络信息量,如果要锁定记录,不时太适合?
 
缓存就是为了减少网络流量,但是要得到最新的记录,也只有访问数据库
才行,
这样行不行,你缓存的数据在数据库中做标记,然后其它的客户端访问
数据时不能修改此类数据。
//关注此题,我说错了不要骂我。
 
在单表时我已经解决问题了,但我不知道updatebatch(arCurrent)的用法。更新当前记录,
如果能用的话,我就能对记录一一跟踪了
 
在更新前先取得最新数据,后通过设置数据集的Filters属性和当前用户缓存的
的记录(fgFetchedRecords)进行比较,过滤出需要更新的记录,
再调用updatebatch(arFiltered)把满足条件的记录更新到数据源中
不过updatebatch(arCurrent)可以把当前行进行更新,也就是说可以对记录一一跟踪了
 
我改变对前记录执行updatebatch(arCurrent)却不行,能给个例子吗?
while not eof do
begin
try
begintrans;
updatebatch(arCurrent);
commit....;
except
rollbacktrans;
end;
next;
end;
更新不了,WHY?如果我用updatebatch,不一条条记录来更新倒是可以的。问题是我想知道
updatebatch(arCurrent)怎么用法?
 
var us:Tupdatestatus;
while not adoquery1.eof do
begin
try
begintrans;
us:=adoquery1.updatestatus;
if us=usModified then
adoquery1.updatebatch(arCurrent);
commit....;
except
rollbacktrans;
end;
adoquery1.next;
end;
 
试试事务处理, ado的因该没有什么大问题?
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部