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

ADO + Datasnap 的錯誤...

尚未結案
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-10 13:48:16 IP:203.66.xxx.xxx 未訂閱
請教一下各位先進 :    我在 TDataModule 中使用了 TADOConnection -> TADOQuery -> TDataProvider -> TClientDataSet 這樣的架構,沒有作 Master/Detail ..    利用一個 TDBNavigator + TDataSource + TDBGrid 作資料的新增/修改/刪除.. 新增與修改都可以正常執行 (AppplyUpdates) ..    但是一碰到刪除資料就會出現 .. 若是執行 Refresh 則會出現 有參考過幾篇討論 "Record Not Found or Changed by another user" 的文章,我的 UpdateMode 是 upWhereKeyOnly, pfInKey 也有正確設定... 請問有什麼可能性會造成這樣的錯誤發生?? 可否給小弟一些方向.. 目前有一個解決方法是跳過 ApplyUpdate ,直接以 SQL Command 執行... 不過實在是很不優雅... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
stillalive
初階會員


發表:7
回覆:148
積分:41
註冊:2004-04-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-10 14:53:55 IP:211.75.xxx.xxx 未訂閱
SouthWind 你好 請問你是否有將數個TABLE做關連 , 如是可將TABLE中 DELETE OR UPDATE RELATED RECORD 設定拿掉 .
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-10 22:40:49 IP:203.66.xxx.xxx 未訂閱
引言: SouthWind 你好 請問你是否有將數個TABLE做關連 , 如是可將TABLE中 DELETE OR UPDATE RELATED RECORD 設定拿掉 .
stillalive 您好 : 我已經將資料庫內的所有關聯都砍掉了,還是發生一樣的狀況...
stillalive
初階會員


發表:7
回覆:148
積分:41
註冊:2004-04-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-11 00:37:58 IP:211.75.xxx.xxx 未訂閱
Update Mode 用 upWhereKeyOnly 可能限制比較嚴緊 , 因異動資料時會檢查key 值 , 當符合唯一性才異動 . upWhereAll 在未真正存檔前使用較自由 , 存檔時再給予唯一鍵值 . 不妨試試看 .
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-11 09:32:15 IP:203.66.xxx.xxx 未訂閱
引言: Update Mode 用 upWhereKeyOnly 可能限制比較嚴緊 , 因異動資料時會檢查key 值 , 當符合唯一性才異動 . upWhereAll 在未真正存檔前使用較自由 , 存檔時再給予唯一鍵值 . 不妨試試看 .
stillalive 您好 : 這我之前有試過, 還是沒用 ,我覺得很奇怪的事情是在 Profilter 內看到送出的 SQL Command 是正確的 (我用 Query Analyzer 執行驗證過),但是就是執行到這個 Command Hold 住了,粗淺的猜測,是否 DataSnap 或 ADO 元件 Check 某些值或狀態後 raise Exception ... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- 發表人 - SouthWind 於 2004/06/11 09:34:16
stillalive
初階會員


發表:7
回覆:148
積分:41
註冊:2004-04-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-11 10:54:46 IP:211.75.xxx.xxx 未訂閱
不知你ADOQUERY 連上幾個TABLE , 我作法是儘量單純 , 一個QUERY一個TABLE作IO , 如需要關聯上其它TABLE , 可在CLIENTDATASET增加新欄位 , 建議你不妨試試 .
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-14 14:48:49 IP:203.66.xxx.xxx 未訂閱
stillalive 您好 : 將 UpdateMode 不要設成 upWhereKeyOnly 的確可以 Work,只是當時我將 TADOQuery 元件中作資料庫 Primary Key 的 Field 內的 ProviderFlags 加入pfInKey ... 我縮小了範圍,做了一些小區域的實驗,找到原因了.. 根據所做的實驗結果與一些前輩的討論文章,可以得知 ADO <-> TDataSetProvider <-> TCleintDataSet 在 ResolveToDataSet 為 false 的條件下,還是多多少少會與 ADO 元件作互動 ... UpdateMode 設成 upWhereKeyOnly 後, TClientDataSet 內相對應於 TADOQuery 元件的 Primary Key Field 中的 ProviderFlags ,pfInKey 會莫名其妙消失... 解決方法 : 方法 1. 使用 UpdateMode 設定成 upWhereAll 方法 2. 在 TDataSetProvider 元件內的 OnUpdateData 利用 DataSet,改變目的欄位的 ProviderFlags (加入 pfInKey).. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- 發表人 - SouthWind 於 2004/06/14 14:53:45 發表人 - SouthWind 於 2004/06/14 15:44:11 發表人 - SouthWind 於 2004/06/14 15:46:17
系統時間:2024-08-22 23:26:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!