全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2112
推到 Plurk!
推到 Facebook!

有關 ClientDataSet.Applyupdate 之後的buffer問題

答題得分者是:GrandRURU
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-03-30 22:40:32 IP:118.160.xxx.xxx 未訂閱
請問各位

在 DataSnap Client 中的 ClientModule , 我是以 動態方式來 Create (即不是由系統自動Create)

if (ClientModule1 <> nil) then FreeAndNil(ClientModule1);
ClientModule1 := TClientModule1.Create(self);

但這個方式出現一個問題

在這個 Module 下有一支 ClientDataSet 要更新資料回到 Server端,
下了
ClientDataSet1.ApplyUpdaet(0) (或 (-1) ) 是成功的,
但如果關閉 ClientDataSet1 再開啟, 重讀這筆記錄, 結果內容仍然是維持原來未修正前的記錄,
必須把 app 釋放掉再重啟重調, 記錄才會是更新後, 我猜是不是buffer的問題,

如果ClientMoudle 是由系統自動 Create 的話, 一樣的程式碼(除了上面 free 及 create 那段去掉)
記錄applyupdate 之後立即調閱, 就是新的內容

因為對DataSnap 是很陌生的, 我不知道這要如何處理, 請指教一二, 謝謝!

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-04-01 08:46:44 IP:59.120.xxx.xxx 訂閱
可以試試看把 DataSetProvider.Option 的

poAutoRefresh, poPropogateChanges 設成 True 再試試看


===================引 用 P.D. 文 章===================
請問各位

在 DataSnap Client 中的 ClientModule , 我是以 動態方式來 Create (即不是由系統自動Create)

if (ClientModule1 <> nil) then FreeAndNil(ClientModule1);
ClientModule1 := TClientModule1.Create(self);

但這個方式出現一個問題

在這個 Module 下有一支 ClientDataSet 要更新資料回到 Server端,
下了
ClientDataSet1.ApplyUpdaet(0) (或 (-1) ) 是成功的,
但如果關閉 ClientDataSet1 再開啟, 重讀這筆記錄, 結果內容仍然是維持原來未修正前的記錄,
必須把 app 釋放掉再重啟重調, 記錄才會是更新後, 我猜是不是buffer的問題,

如果ClientMoudle 是由系統自動 Create 的話, 一樣的程式碼(除了上面 free 及 create 那段去掉)
記錄applyupdate 之後立即調閱, 就是新的內容

因為對DataSnap 是很陌生的, 我不知道這要如何處理, 請指教一二, 謝謝!

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-04-01 22:42:08 IP:118.160.xxx.xxx 未訂閱
感謝RuRu兄的指點, 我把這兩個參數打開後, 果然可以了(我是改 ServerMethod 上的 TDataSetprovider)
看來 DataSnap 還是有很多"不能說的祕密"

另外, 再請教RuRu兄兩個問題
1. poPropogateChanges 用意為何?
2. 在 ClientModule 中的SQLconnection, 有一個 KeepConnect 設定為 True 或 False 的最大差別何在?
我試的結果, 好像沒有差異

===================引 用 GrandRURU 文 章===================
可以試試看把 DataSetProvider.Option 的

poAutoRefresh, poPropogateChanges 設成 True 再試試看


===================引 用 P.D. 文 章===================
請問各位

在 DataSnap Client 中的 ClientModule , 我是以 動態方式來 Create (即不是由系統自動Create)

if (ClientModule1 <> nil) then FreeAndNil(ClientModule1);
ClientModule1 := TClientModule1.Create(self);

但這個方式出現一個問題

在這個 Module 下有一支 ClientDataSet 要更新資料回到 Server端,
下了
ClientDataSet1.ApplyUpdaet(0) (或 (-1) ) 是成功的,
但如果關閉 ClientDataSet1 再開啟, 重讀這筆記錄, 結果內容仍然是維持原來未修正前的記錄,
必須把 app 釋放掉再重啟重調, 記錄才會是更新後, 我猜是不是buffer的問題,

如果ClientMoudle 是由系統自動 Create 的話, 一樣的程式碼(除了上面 free 及 create 那段去掉)
記錄applyupdate 之後立即調閱, 就是新的內容

因為對DataSnap 是很陌生的, 我不知道這要如何處理, 請指教一二, 謝謝!

JL9168
中階會員


發表:133
回覆:223
積分:76
註冊:2011-09-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-04-02 07:05:29 IP:114.33.xxx.xxx 未訂閱
關於Options的說明

1.PoAutoRefresh ------------>當伺服器有資料更新時,DatasetProvider會自動更新Client端的資料
2.PoPropogateChanges--->當伺服器有資料更新時,更新的部分會傳到Client端;並且合併到Client端的資料Buffer中

KeepConnect 設定為 True 或 False 的最大差別何在?
這是DataSnap節省連線資源的使用上的設計,KeepConnect 設定為 True時,即使透過Client端關閉了所有DataSetDataSnap的Client ------ApServer之間的連線依然存在,不會斷線,FALSE時;就會在此時自動斷線了
編輯記錄
JL9168 重新編輯於 2014-04-02 07:13:01, 註解 無‧
JL9168 重新編輯於 2014-04-02 07:13:20, 註解 無‧
JL9168 重新編輯於 2014-04-02 07:13:48, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-04-02 13:30:58 IP:114.32.xxx.xxx 訂閱
昨晚和ruru一起吃飯,聊到pd的這問題後… ruru回去就手癢去找問題了喔?

看來以後pd若有問題,可以請ruru吃個飯解決一下 ! 哈哈,順便給ruru一個讚啦!

===================引 用 GrandRURU 文 章===================
可以試試看把 DataSetProvider.Option 的

poAutoRefresh, poPropogateChanges 設成 True 再試試看


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
leveon
資深會員


發表:30
回覆:389
積分:303
註冊:2012-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-04-02 15:10:41 IP:61.231.xxx.xxx 訂閱
看來ruru對 Datasnap有很多經驗
poPropogateChanges 是指 在 DataSetProvider這元件上的
BeforeUpdateRecord AfterUpdateRecord 兩事件中修改了Delta的值
會將修改後的值同步到Clientdataset

之前曾經做過Datasnap server的壓力測試
在有狀態的情況下 server只能用"不堪一擊"來形容
無狀態的情況承載能力就好一些
但還是不符合專案需求 最後沒有採用
ruru上一篇提到的將CDS存成XML
我覺得是徹底解決很多Datasnap離奇問題的好方法
server就可以變成沒有狀態
變成很單純的web service
但也意味必須放棄整個IProvider介面
很多情況必須要自己來

另外server端的物件生滅控制機制也應該盡量
讓他透明 原有的Datasnap Server猶如一個黑箱
永遠不知道裡面發生什麼事
個人認為Datasnap並非完全無用
追求穩定 效能的話 只能用一半 另一半要自己補完
仍有機會做出媲美商業等級的AP server


===================引 用 aftcast 文 章===================
昨晚和ruru一起吃飯,聊到pd的這問題後… ruru回去就手癢去找問題了喔?

看來以後pd若有問題,可以請ruru吃個飯解決一下 ! 哈哈,順便給ruru一個讚啦!

===================引 用 GrandRURU 文 章===================
可以試試看把 DataSetProvider.Option 的

poAutoRefresh, poPropogateChanges 設成 True 再試試看



GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-04-02 15:18:33 IP:59.120.xxx.xxx 訂閱
DataSnap 架構下,Server 端最需要了解的就是 DataSetProvider

有非常多的設定,在 HELP 各別解釋也很清楚,只是,
每個選項用在何種場何?是否每個資料庫都適用?

到目前為止,還沒有任何資料說得明白。

poPropogateChanges:在 ApplyUpdate 時就會自動帶回已更新的值。
poAutoRefresh:在ApplyUpdate 後,會自動將 AutoIncrement 欄位更新及 Default 值回傳。

話說這也不是所有資料庫都會需要使用這些設定的......
編輯記錄
GrandRURU 重新編輯於 2014-04-02 16:28:38, 註解 無‧
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-04-02 17:53:59 IP:125.227.xxx.xxx 訂閱
反了,反了,現在吃飯都不用找了(淚奔)
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2014-04-02 19:56:06 IP:118.169.xxx.xxx 未訂閱
吃飯小事啦! 就怕ruru兄不敢賞臉

===================引 用 aftcast 文 章===================
昨晚和ruru一起吃飯,聊到pd的這問題後… ruru回去就手癢去找問題了喔?

看來以後pd若有問題,可以請ruru吃個飯解決一下 ! 哈哈,順便給ruru一個讚啦!




P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2014-04-02 19:59:17 IP:118.169.xxx.xxx 未訂閱
Jason版主, 有沒有興趣也來吃個飯?
===================引 用 Jasonwong 文 章===================
反了,反了,現在吃飯都不用找了(淚奔)
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2014-04-02 22:46:25 IP:125.227.xxx.xxx 訂閱
PD 版主,那有什麼問題~
===================引 用 P.D. 文 章===================
Jason版主, 有沒有興趣也來吃個飯?
===================引 用 Jasonwong 文 章===================
反了,反了,現在吃飯都不用找了(淚奔)
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2014-04-08 08:36:25 IP:59.120.xxx.xxx 訂閱
P.D.版主您客氣了

下次有機會再約出來哈啦 ^ ^

===================引 用 P.D. 文 章===================
吃飯小事啦! 就怕ruru兄不敢賞臉

===================引 用 aftcast 文 章===================
昨晚和ruru一起吃飯,聊到pd的這問題後… ruru回去就手癢去找問題了喔?

看來以後pd若有問題,可以請ruru吃個飯解決一下 ! 哈哈,順便給ruru一個讚啦!




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