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

tdatasetprovider元件連結的資料集元件更新

尚未結案
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-08 18:26:04 IP:203.70.xxx.xxx 未訂閱
在Tdatasetprovider元件更新資料時有二種方法第一種是sql敘逑的方法applydates()來更新和另一個方法是由tdatasetprovider元件連結的資料集元件來負責更新元件那麼我現在想要用第二種方法也就是tdatasetprovider元件連結的資料集元件我除了要把resolvetodatase設為true那麼我還要做什麼設定呢 還有我把resolvetodataset設為true那麼我的sql資料庫下達applyupdates(0)都沒有辦法更新我的作法是那錯誤了呢
jieshu
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-08 19:01:35 IP:203.204.xxx.xxx 未訂閱
引言: 在Tdatasetprovider元件更新資料時有二種方法第一種是sql敘逑的方法applydates()來更新和另一個方法是由tdatasetprovider元件連結的資料集元件來負責更新元件那麼我現在想要用第二種方法也就是tdatasetprovider元件連結的資料集元件我除了要把resolvetodatase設為true那麼我還要做什麼設定呢 還有我把resolvetodataset設為true那麼我的sql資料庫下達applyupdates(0)都沒有辦法更新我的作法是那錯誤了呢
1.要看你連的DataSet種類是ADO還是BDE,ADO應該不用設定什麼,BDE的話就要像Client/Server一樣可增刪修的設定。 2.應該是某個地方出錯了,你可監測SQL狀態,或設定將更新的錯誤訊息Show出。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-08 19:13:50 IP:203.70.xxx.xxx 未訂閱
我是使用ado那麼我要怎麼知道我現在是不是使用了tdatasetprovider元件連結的資料集元件呢是只要把resolvetodataset設為true就可以了嗎 我對這個觀念還是不太懂~~謝謝
Chance36
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-08 21:05:04 IP:211.20.xxx.xxx 未訂閱
引言: 還有我把resolvetodataset設為true那麼我的sql資料庫下達applyupdates(0)都沒有辦法更新我的作法是那錯誤了呢
sundy6719 你好 DatasetProvider的resolvetodataset 屬性只是很單純的讓設計師決定,欲更新資料的SQL指令是由誰來產生罷了,設為False時是由DataSetProvider內部的SQLResolver來產生更新資料的SQL指令,而設為True時,則交給DataSetProvider.DataSet來產生更新資料的SQL指令, 你的DataSetProvider.DataSet是使用ADO的資料集元件,基本上其包容性比其他的資料集元件(如BDE)還大,所以我覺得你可以從以下幾點著手找到問題的原因: 1.先確定元件關聯的正確性是否如下 TAdoDataSet->TDataSetProvider->TClientDataSet->.. 2.TDataSetProvider.Options 是否AllowCommandText 3.是:看看ClientdataSet.Commandtext 的SQL指令為何 4.否:看看TAdoDataSet.Commandtext的SQL指令為何 5.檢查TDataSetProvider.Options 中的DiableEdits、DiableInsert....等等與資料更新相關的屬性是否為True;
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-10 11:57:39 IP:203.70.xxx.xxx 未訂閱
Chance36前輩resolvetodataset 屬性設為False時是由DataSetProvider內部的SQLResolver來產生更新資料的SQL指令,而設為True時,則交給DataSetProvider.DataSet來產生更新資料的SQL指令 那這二者有什麼差別呢那我到底要用那一個還有我是參考李維老師的分散式多層應用系統篇可是看到p3-13就看不懂到底在說什麼研究好久可是都沒有辦法凸破
Chance36
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-10 13:45:09 IP:203.204.xxx.xxx 未訂閱
sundy6719 你好 一般我們使用TQuery時,不是常用 Query1.Edit; Query1.FieldByName('Field1').AsString := 'xxxxx'; .... Query1.Post ; 如上程式,當Query1.Post;後其實TQuery已將你異動的情形分析後產生SQL指令,交給後端資料庫來更新資料,因此我們可以知道TQuery可以解決資料更新的SQL指令產生的工作所以它可視為Resolver(resolver直譯為[解決者]) 在多層架構中的TDataSetProvider也具有如此的能力,但它並不專權,還開放了一個屬性,由設計師來決定,這個工作應該交誰來作;所以resolvetodataset=true;就是說產生更新資料的SQL指令的工作交給參與datasetProvider合作的資料集元件來作,否則就由DataSetProvider自已作(DatasetProvider內部有個SQLResolver成員可以勝任)來處理 另外,ADO的資料集元件,可以處理關聯資料的異動 AdoDataset.CommandText := 'Select * from tablea a, tableb b Where a.ID_NO=b.ID_NO' ; AdoDataset.Open; AdoDataset.Edit; AdoDataSet.FieldByName('xxxx').AsString := 'xxxxx; ..... AdoDataSet.Post; 此時ADO的資料集元件會自動分析出來,這筆異動是要更新回兩個資料表,依據其關聯性而產生兩個SQL指令分別更新TableA及TableB兩個表格(這可從SQL Profile中看出) , 所以當你的datasetProvider之dataset連結到ADO的資料集時,resolvetodataset若為False,交給datasetprovider來分析,由於datasetprovide與BDE的資料集元件一樣,只能處理單一資料表的更新,對於多資料表的的更新,只好認輸,然後秀出錯誤訊息了;相對的resolvetodataset若設為true,交由AdoDataset來處理,就OK了
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-10 16:53:00 IP:203.70.xxx.xxx 未訂閱
Chance36前輩我可以再重複您所說的是不是 resolvetodataset為true則可以處理兩個資料表以上的更新而resolvetodataset為false則只能處理單筆資料表的更新呢 我的觀念還正確嗎?? 你的解答真的寫的好詳細真的非常感謝您~^___^
Chance36
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-10 17:51:10 IP:203.204.xxx.xxx 未訂閱
引言: resolvetodataset為true則可以處理兩個資料表以上的更新而resolvetodataset
sundy6719 你好 不!它是有先決條件的 1.dataSetProvider的Dataset是連接Ado的資料集才可以 2.resolvetodataset為true 是因為ADO有處理關聯資料表的更新功能而不是DatasetProvider,resolvetodataset設為true則DatasetProvider把解析更新的SQL的工作交給ADO來處理。
Ktop_Robot
站務副站長


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

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


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


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


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

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