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

  • 主题发起人 主题发起人 sydan
  • 开始时间 开始时间
S

sydan

Unregistered / Unconfirmed
GUEST, unregistred user!
您好:
小弟最近學會了使用Midas技術,但在使用過程中出現了一個非常重要的問題.那就是當
我在二個(或更多)工作站上同時修改一筆記錄
001 張三 男 未婚 北京 ......
當第一個工作站按下存盤后.數據存取正常;當第二個工作站按存盤時,也沒有任何錯誤返應
,且屏幕上也是第二個工作站修改的數據.....但實際系統只存盤了第一個工作站修改的內容啊,
這是怎麼回事.我的存盤命令是: ClientDataSet1.ApplyUpdates(0);
我想能不能有一個辦法當用戶按下修改的同時將服務器的相對應記錄進行加鎖,再等當用
戶按下存盤后再對服務器的相對應數據進行解鎖呢?不過我不會怎樣做,也不知道這樣行不行得
通,還望各位大哥多多幫助.小弟心里一點底都沒有啊!!!!


////////////////////////////////////
我的意思是想:
第一個工作站按下修改后,且未有按保存的時候,需要讓其它工作站無法對這筆記錄進行
修改,刪除操作.需要等按下保存后才能恢復其它用戶的修改權.
我當時想的是給記錄加鎖,但我又不知道如何鎖啊!這可怎麼是好呢?
我記得SAP就是這樣的.當有用戶要修改某筆記錄時,服務器凍結那筆記,當其它用戶再按
修改時系統做出提示,只有當第一個用戶按下保存后才能夠讓第二個用戶操作!
 
李维的书上说的很明白,建议去看书.
 
ClientDataSet1.ApplyUpdates(-1);
呵呵
 
老人家,我也這樣試過,但是還是有一點問題啊,你能詳細說說嗎?我不太清楚這個功能的調試
多謝!
 
如果打开数据是同样的记录,当然有你说的问题。
这是无法避免的,你只有跟客户说明,至于返回错误,
你可以让它返回数据库的错误,会告诉你找不到记录或已经被修改的提示。
你想想,数据已经被修改了,它怎么还会找到原来一样的记录,当然提交失败了。
 
我也开始学吧
 
在业务逻辑上应该能控制不会出现这种情况。
你的程序应该能不出现这种情况。
每个业务员处理的业务,另外一个人真么也作同样工作?管理会乱。你的程序再怎么
写,也注定不会是一个成功的程序。
管理跟不上,程序是写不好的!
见了很多人提出类似问题,根本不值回答,希望对大家有所帮助。
是胡语气有些过,没有别的意思,请大家谅解。
欢迎交流.hanshujiang@yahoo.com.cn
 
一个简单的办法就是用ado的锁功能在服务器端对数据库进行枷锁
如果服务器操作失败再向client返回错误信息
思想是这样的,具体方法就去查资料吧
 
建議
cache
then
applyupdate
 
TO:taninsh
你好!
我也是你那樣想的.但是,你知道嗎?我沒有辦法也不知道如何下手及操作啊.
當然我想,也不會是非常的困難.所以找了很多書及相關資料.但很失望,李維的書我也看了
不知是我自已不行還是它確實沒有寫出一個好的方案.所以我至今還是不會如何操作.
故只有求救於大富翁了.希望她能幫我解決,多謝了!

你能提供更為詳細的資料嗎?多謝.
 
兄弟們:
你們好,我已測到錯誤了.但是很可惜,你們知道是什麼時候測到的嗎?是在更新並保存
記錄的時候測到的.
也就是第一個修改的不會有任何問題,但是第二個修改的就麻煩了,因為他修改后保存
的時間就出錯了,這該如何是好.思來想去我覺得還是在當用戶安Edit的時候就檢測是否有
用戶正在修改.如果是的話就只讓用戶瀏覽,而不讓用戶修改了.
這樣的話我想就得先在用戶按下Edit的時候就對記錄進行加鎖了,當用戶按下更新並保存
的時候再進行解鎖.這個該如何做呢?????望各位大哥快來幫幫小弟啊.....
 
前端不要用clientdataset之类的,直接向应用服务器发sql.
我基本不用clientdataset之类,而是调用应用服务器得方法,把数据穿过去,有后台向
数据库发sql
 
你想保存第一个人修改的还是最后一个人修改的???
你的表有关键字吗?
 
在第一个人发生修改结束以后,其它人不经数据更新而直接修改会出错吗?
 
我的意思是想:
第一個工作站按下修改后,且未有按保存的時候,需要讓其它工作站無法對這筆記錄進行
修改,刪除操作.需要等按下保存后才能恢復其它用戶的修改權.
我當時想的是給記錄加鎖,但我又不知道如何鎖啊!這可怎麼是好呢?
 
黨從server 下來書據後.你可以隨便修改.....
但是如果cache up date 後,就會用到sql 事務處理機制.....
要麼成功,要麼失敗.... 就是這些了
 
这是一个复杂的过程啊!
ClientDataset有一些过程可以自动判断。
可以刷新记录,因为记录是两份的!如果发现修改的过程中有不一致的话,可以放弃全部,或者
。。。。。
 
>>我的意思是想:
第一個工作站按下修改后,且未有按保存的時候,需要讓其它工作站無法對這筆記錄進行
修改,刪除操作.需要等按下保存后才能恢復其它用戶的修改權.
我當時想的是給記錄加鎖,但我又不知道如何鎖啊!這可怎麼是好呢?

为什么这么想???我觉得这你用担心,如果发生你说的这种情况,程序会自己报错的。
 
TO:wumeng
就是如果我不顯示調用Refresh系統始終都不報錯啊.
再還有就是,即使的調用了更新命令使系統報錯了,但那也以是在用戶已經修改了記錄后
的事啊,這可怎麼行呢,我就是想在用戶修改之前就知道有沒有用戶在修改這篇記錄啊.

我覺得最重要的是Midas技術的數據已搞到本地內存中,所以.他有一定的時間內沒有同服
務器發生的微小變化同步,所以會出現我所說的問題.
 
只有向服务器提交修改后才能知道服务器上的数据是否已经改动过,提交之前好象难以判断
。提交修改后调用clientdataset的reconcile方法判断是否发生错误,如果有错误,
则ReconcileError事件激活,在此事件内可进行错误处理,它的action回传参数可以告诉
服务器如何处理(具体可看帮助),如要由用户决定处理动作,可以这样:
procedure TForm2.ClientDataSet1ReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
Action := handlereconcileerror(DataSet,updatekind,e);
end;

HandleReconcileError是标准前端错误处理程序,会在前端显示一个错误处理窗口。
 
后退
顶部