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

如何在三层中更新数据库(无状态对象之下)

尚未結案
seven_sinfull
一般會員


發表:5
回覆:7
積分:2
註冊:2003-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-05 17:00:44 IP:61.235.xxx.xxx 未訂閱
当我在设置客户端的clientdataset.fetchondemand:=false;并设置每次取得5笔数据时,在DbGrid中修改一笔数据,并调用applyupdates之后,显示错误,不能更新数据.请问在无状态对象之下如何更新数据? study hard,work hard.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-13 08:48:33 IP:210.65.xxx.xxx 未訂閱
Hi:    我沒有真正實作過,不過你可以試試 針對 ClientDataSet 作一個 Loop 去判斷那一筆資料有異動,再用 SQL Command 去 Update 資料庫 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-13 09:45:32 IP:203.204.xxx.xxx 未訂閱
引言: 当我在设置客户端的clientdataset.fetchondemand:=false;并设置每次取得5笔数据时,在DbGrid中修改一笔数据,并调用applyupdates之后,显示错误,不能更新数据.请问在无状态对象之下如何更新数据? study hard,work hard.
請問錯誤訊息是什麼?一般ApplyUpdate會將Delta傳回Server,就知道異動哪些,應該不會有問題才是!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-13 10:25:57 IP:210.65.xxx.xxx 未訂閱
Hi:    Sorry,誤解了『無狀態對象之下』這句話 如過你的 > >指令即可進行資料庫更新,並於 >< face="Verdana, Arial, Helvetica">引言: 針對 ClientDataSet 作一個 Loop 去判斷那一筆資料有異動,再用 SQL Command 去 Update 資料庫 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-13 20:29:12 IP:211.20.xxx.xxx 未訂閱
引言: 当我在设置客户端的clientdataset.fetchondemand:=false;并设置每次取得5笔数据时,在DbGrid中修改一笔数据,并调用applyupdates之后,显示错误,不能更新数据.请问在无状态对象之下如何更新数据? study hard,work hard.
請參考以下連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39087 另你在DbGrid中修改一笔数据後游標未離開該欄位,即按[存檔]按鈕來调用applyupdates 且你的[存檔]按鈕是使用TSpeedButton的話,該記錄是尚未Post的,請在applyupdates之前作以下判斷
 
  If ClientDataSet.State IN [dsEdit,dsInsert] Then 
     ClientDataSet.Post;
  If ClientDataSet.ChangeCount > 0 Then 
     ClientDataSet.applyupdates(-1);
 
ps:一般使用DBGrid等元件它會自動Post的,但Focus需先移開該元件或按個Enter亦可。
joseph_liu
一般會員


發表:0
回覆:3
積分:0
註冊:2002-10-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-02 16:04:57 IP:156.24.xxx.xxx 未訂閱
各位先進..我也有類似的問題..小的table沒問題..但我如果要用這個方法更新較大的table就會出現 GeneralSQL error. [Microsoft][ODBC Microsoft Access Driver]參數太少, 預期個數28..(有的時候是36, 41, 但table欄位是47) ..ClientDataSet1:Must apply updates before refreshing data. 謝謝.. ----------------------------------- if (dbmod.ClientDataSet1.State=dsInsert) or (dbmod.ClientDataSet1.State=dsEdit) then begin dbmod.ClientDataSet1.Post; end; if (dbmod.ClientDataSet1.ChangeCount > 0) then begin showmessage(IntToStr(dbmod.ClientDataSet1.ChangeCount)); dbmod.ClientDataSet1.ApplyUpdates(-1); end; dbmod.ClientDataSet1.Refresh; ------------------------- ps.. 若把 dbmod.ClientDataSet1.Refresh;這行拿掉..小table依然可以更新, 但大的table就無法更新..不知為什麼? 資料庫:ms-access delphi 7 SERVER 端資料庫元件: Tdatabase, TQuery 發表人 - joseph_liu 於 2004/02/02 16:08:26 發表人 - joseph_liu 於 2004/02/02 17:04:24
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-03 01:02:56 IP:203.204.xxx.xxx 未訂閱
引言: 各位先進..我也有類似的問題..小的table沒問題..但我如果要用這個方法更新較大的table就會出現 GeneralSQL error. [Microsoft][ODBC Microsoft Access Driver]參數太少, 預期個數28..(有的時候是36, 41, 但table欄位是47) ..ClientDataSet1:Must apply updates before refreshing data. 謝謝.. ----------------------------------- if (dbmod.ClientDataSet1.State=dsInsert) or (dbmod.ClientDataSet1.State=dsEdit) then begin dbmod.ClientDataSet1.Post; end; if (dbmod.ClientDataSet1.ChangeCount > 0) then begin showmessage(IntToStr(dbmod.ClientDataSet1.ChangeCount)); dbmod.ClientDataSet1.ApplyUpdates(-1); end; dbmod.ClientDataSet1.Refresh; ------------------------- ps.. 若把 dbmod.ClientDataSet1.Refresh;這行拿掉..小table依然可以更新, 但大的table就無法更新..不知為什麼? 資料庫:ms-access delphi 7 SERVER 端資料庫元件: Tdatabase, TQuery 發表人 - joseph_liu 於 2004/02/02 17:04:24
出錯的應該是這行
    dbmod.ClientDataSet1.ApplyUpdates(-1);
與    dbmod.ClientDataSet1.Refresh; 無關    提供另一注意事項
  當 ClientDataSet1.ChangeCount > ???? 時
    ClientDataSet1.ApplyUpdates(-1); 還是會更新錯誤
  因交易控制的緩衝不夠了
  但 ???? 是多少呢 我也不知道,端看資料庫的參數設定、資料錄大小....而定。我的測試數據 300~500之間    解決方式:讓每一次的ApplyUpdates的資料異動筆數皆不超過100(我的標準)
1.在每一次的Post 檢查ChangeCount 若大於等於100則先行ApplyUpdates
2.程序結後或結束前再檢查ChangeCount > 0 又再一次ApplyUpdates    若還有錯,則應該是不符合你的資料庫邏輯或是異動的資料在更新前已被其他使用者先行更新過了......等    
joseph_liu
一般會員


發表:0
回覆:3
積分:0
註冊:2002-10-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-03 12:15:09 IP:156.24.xxx.xxx 未訂閱
Dear Chance36: 問題已修正..後來發現是欄位名稱過長造成資料庫無法更新..另外..access中的文字欄位預設一定要有資料要拿掉.. 謝謝您百忙中依然拔刀相助...非常感激 發表人 - joseph_liu 於 2004/02/03 13:24:35
Ktop_Robot
站務副站長


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

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


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


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


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

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