線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1823
推到 Plurk!
推到 Facebook!

数据提交到服务器后,在中间层所做的修改,能及时反应到客户端

尚未結案
DKSoftCHS
一般會員


發表:5
回覆:13
積分:3
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-18 08:07:16 IP:218.14.xxx.xxx 未訂閱
我在客户端按下ApplayUpdate(-1)后。 在中间层的DataProvder的OnUpdateData里写了如下代码
procedure TFDM_BASE.DspCustSortCodeUpdateData(Sender: TObject;
  DataSet: TCustomClientDataSet);
begin
  inherited;
  with DataSet do
  begin
    First;
    while not Eof do
    begin
      if UpdateStatus = usInserted then
      begin
        Edit;
        FieldByName('UpBuildTime').AsDateTime := Now();
        Post;
      end;
      Next;
    end;
  end;
end;
我想把中间层对数据所做的修改(即UpBuildTime)在客户端更新数据后可以看到对UpBuildTime做的改动。 發表人 - DKSoftCHS 於 2004/08/18 08:09:37
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-18 09:18:55 IP:218.168.xxx.xxx 未訂閱
1.如果想在AP端改值後,Client會自動合併新值,做法如下 首先將DataSetProvider的Options的poPropogateChanges設成True 接著在BeforeUpdateRecord/AfterUpdateRecord事件中將新值寫回欄位(TField)的NewValue(像你寫在OnUpdateData事件中恐怕是不行的請改寫在BeforeUpdateRecord,且BeforeUpdateRecord每異動筆就呼叫一次所以可以把while控制拿掉) 請參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46216
 
eg.
procedure TFDM_BASE.DspCustSortCodeBeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
var currTime:TDateTime;
begin
 if UpdateKind= ukInsert then
 begin
  currTime := Now;
  DeltaDS.FieldByName('UpBuildTime').AsDateTime := currTime;
  DeltaDS.FieldByName('UpBuildTime').NewValue := currTime; 
 end;
end;
2.另外一種比較簡單但較沒效率的作法就是你每次client異動一筆資料後馬上下ApplyUpdate並接著執行RefreshRecord 混心雜欲 棄修身~唉 發表人 - speedup 於 2004/08/18 09:23:02 [ 發表人 - speedup 於 2004/08/18 09:30:22 發表人 - speedup 於 2004/08/18 09:31:44
------
唉~
DKSoftCHS
一般會員


發表:5
回覆:13
積分:3
註冊:2004-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-18 10:39:49 IP:218.14.xxx.xxx 未訂閱
speedup,谢谢你的回答,我试试
DKSoftCHS
一般會員


發表:5
回覆:13
積分:3
註冊:2004-07-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-18 11:13:38 IP:218.14.xxx.xxx 未訂閱
speedup,谢谢你的回答,已经可以了。
Chelen.Jak
一般會員


發表:2
回覆:11
積分:7
註冊:2004-05-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-30 13:51:13 IP:219.130.xxx.xxx 未訂閱
 
引言: 1.如果想在AP端改值後,Client會自動合併新值,做法如下 首先將DataSetProvider的Options的poPropogateChanges設成True 接著在BeforeUpdateRecord/AfterUpdateRecord事件中將新值寫回欄位(TField)的NewValue(像你寫在OnUpdateData事件中恐怕是不行的請改寫在BeforeUpdateRecord,且BeforeUpdateRecord每異動筆就呼叫一次所以可以把while控制拿掉) 請參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46216 eg. procedure TFDM_BASE.DspCustSortCodeBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean); var currTime:TDateTime; begin if UpdateKind= ukInsert then begin currTime := Now; DeltaDS.FieldByName('UpBuildTime').AsDateTime := currTime; DeltaDS.FieldByName('UpBuildTime').NewValue := currTime; end; end; 2.另外一種比較簡單但較沒效率的作法就是你每次client異動一筆資料後馬上下ApplyUpdate並接著執行RefreshRecord 混心雜欲 棄修身~唉 發表人 - speedup 於 2004/08/18 09:23:02 [ 發表人 - speedup 於 2004/08/18 09:30:22 發表人 - speedup 於 2004/08/18 09:31:44
procedure TFDM_BASE.DspCustSortCodeBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean); var currTime:TDateTime; begin if UpdateKind= ukInsert then begin currTime := Now; DeltaDS.Edit; DeltaDS.FieldByName('UpBuildTime').AsDateTime := currTime; DeltaDS.FieldByName('UpBuildTime').NewValue := currTime; DeltaDS.Post; end; end;
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-30 13:44:11 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-20 0:17:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!