三层的applyupdates的问题(100分)

  • 主题发起人 主题发起人 oocoolie
  • 开始时间 开始时间
O

oocoolie

Unregistered / Unconfirmed
GUEST, unregistred user!
用applyupdates有时能正确更新,但有时返回record is modify by another的提示
(在返回错误事件里的e.message)
无法更新,请问怎样解决
 
这个好像以前讨论过很多。
 
在你的clientDataSet里面加入一个事件就可以解决了
procedure TMainForm.CDS_PODRMReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError;
UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
HandleReconcileError(Dataset, Updatekind,E);
end;
记住先要加入这个file-new-dialogs-ReconcileErrorForm
这是一个解决更新冲突的对话框
 
问题:多人同时编辑操作的时问题 ( 积分:100, 回复:6, 阅读:76 )
分类:数据库-C/S型 ( 版主:千中元, luyear )
来自:hutaomoney, 时间:2001-7-27 11:08:00, ID:591243 [显示:小字体 | 大字体]
几个DBEDIT控件关联到一个数据表,我采用缓存更新,在单机上做修改记录一点问题没有。
可是一但两台机同时做,只要其中一人修改别人已改变的记录就会报错‘记录已被另一用户改变',以后改别的
记录也不能成功,也报同样的错。谢谢高手赐教!
//存盘时的代码
With DmBaseData.QGroupdo
begin
DmBaseData.ShopDB.StartTransaction ;
Try
ApplyUpdates;
DmBaseData.ShopDB.Commit ;
Except
DmBaseData.ShopDB.Rollback ;
Raise ;
end;
CommitUpdates;
//{on success, clear the cache}
end;


来自:千中元, 时间:2001-7-31 22:26:00, ID:593196
1)确保有主键
2)结合数据库,选择Database的策略


来自:flysand, 时间:2001-7-31 22:54:00, ID:593218
skip该记录再applyupdates


来自:Brave, 时间:2001-8-1 9:21:00, ID:593365
这个问题不仅是在多台机器上使用才会出现,同一台机器上,如果你打开两个同样的程序,
两个程序同时操作,用一个程序先新增一条记录,然后用第二个程序删除该记录,
这时第一个程序因为没有执行刷新,仍会显示该条记录,你再在这条记录上执行修改操作,
然后保存,就汇报错“记录已被另一用户改变”。类似的,多个用户对同一记录执行操作,
就会出现上述问题,这是数据库自带的保护机制,你不好控制,也不应该控制。如果要避免
这个现象,就要为每个用户设置不通的操作权限,避免所个用户同时操作一条记录。


来自:ls2000, 时间:2001-8-1 9:40:00, ID:593382
这是数据库保护一致性而设置的,你可以先refresh数据表,然后再修改.应该没有问题了.


来自:铁锈, 时间:2001-8-1 10:31:00, ID:593432
一个人操作完毕把表关闭,第二人再操作。试试看


来自:fishor, 时间:2001-8-3 20:59:00, ID:594550



 
还没有解决
可不可以在ado记录集的指针类型及锁类型上进行设置?
 
可不可以通过设置dataprovider 的updatemode解决
我用的是midas
高手???
 
后退
顶部