關於Midas數據共享問題. (40分)

  • 主题发起人 主题发起人 sydan
  • 开始时间 开始时间
midas方案本身的缺陷,实质上就是数据的即时同步问题.
锁定记录的意义不大,想想,如果第一个用户掉线,或是死机,或者效率低下,其他人怎么工作?
 
》》我就是想在用戶修改之前就知道有沒有用戶在修改這篇記錄啊.

三层就是为多用户并发而设计的。所以你提出的这个问题是没办法解决的。
 
database可以设置客户是当处理事务的时候,一个事务在处理时,不允许另一个事务
来同时处理,只有一个事务结束后,另一个才可以..
好象是TRAN...什么属性.里面有三个属性让你选.
三层的话你只需要在应用服务器端设置一下就可以了,
好象是最下面那个.
你楼下的那位大哥说的很对,李维的书上是有的.
 
TO:kupwl2
您好!
但是我用的是ADO啊,而且肯定是不會用BDE的!這可怎麼是好了!
 
ADO 也有 TRAN呀!!!但这没不能解决你的问题!!!
还有,即使你说的全都作到了,那么,现在有3 个用户都打开了同一个表,而且都修改同
一条记录,你要保留第一个修改的,还是最后一个修改的呢???
所以,最终都要回到我说的问题一来: 但看你的意思是想保存最后的修改。

来自:wumeng, 时间:2002-11-18 10:32:00, ID:1438697 | 编辑
你想保存第一个人修改的还是最后一个人修改的???
 
你们好:
我现在也在写一个出入库的数据库。我觉得应该在修改记录并存储的时候就对数据库进
行一次Refresh操作。这样当出错时就会报错。程序如下。
try
clientdataset1.edit;
ClientDataSet1.ApplyUpdates(0);
clientdataset1.refresh;
except
on exception do
begin
clientdataset1.close;{当REFRESH出错时,关闭并重新打开
clientdataset1.open; 数据库就可以解决。并重新获得现在的实际数据}
showmessage('数据可能正在被其他用户使用。请稍后尝试修改');
end;
 
这个问题小弟我知道原因:
在 Midas技术中,默认的更新模式是whereall。
即提交更新时一个关键的问题是如何定位原先的记录再更新,三种方式:
A、根据主键来定位 keyOnly模式
B、根据主键+变动的字段来定位
C、根据原记录所有的字段来定位原记录 whereAll模式式(默认)

当两个以上的用户打开同一张表且更新同一条记录时,第一个人成功,其它人都会提示
更新错误,即记录被另外的一个人改变,无法定位。

解决办法:
一种:(土一点的)
告诉另外的几个用户你们关掉当前窗口,重新进入操作。
另一种:
采用A类提交方法,在应用服务器上设置对TDataSetProvider的属性UpdateMode属性
为KeyOnly,但是你要设置提交的表中那一个字段是Key字段即TField的属性ProviderFlags
为pfInKey ,这招采方能用。在应用服务器上恰当的更新事件中处理它们。
需要说明的是,这样做的话,当多用户的更改同一条记录的同一个字段时,最后的
结果以最后一个用户的为准。
另一种方法:(我也没有试过,有机会会在下一个项目中用。)
模拟ApplyUpdates方法,这样做的话可能程序员的自由度大一点。

哈哈,我。。。。。。。
 
后退
顶部