D2007 dbExpress + mssql2k5 : can not update ? |
缺席
|
feng
一般會員 發表:13 回覆:34 積分:14 註冊:2002-10-09 發送簡訊給我 |
大家好:
我使用以下架構: SQLConnection SQLDataSet DataSetProvider ClientDataSet (datasource dbgird 作異動) 使用 SQLConnection 連接 MS SQL Server 2005 除了必要的設定(如伺服器名稱/資料庫名稱/帳號/密碼等)之外,一切都使用預設值 資料瀏覽沒有問題,但是在dbgrid異動一筆資料後,利用 clientdataset.applyupdate1(-1) 進行更新時卻會發生錯誤 如果將 DataSetProvider 的 ResolveToData 改成 True 錯誤為 : can not modify a read-only dataset 如果將 DataSetProvider 的 ResolveToData 改成 False錯誤為 : 因處於手動或分散式異動模式,所以無法建立連線 不知道是否有人遇到相同的問題 謝謝你的回覆 |
feng
一般會員 發表:13 回覆:34 積分:14 註冊:2002-10-09 發送簡訊給我 |
|
myemail
一般會員 發表:1 回覆:6 積分:1 註冊:2007-01-11 發送簡訊給我 |
|
feng
一般會員 發表:13 回覆:34 積分:14 註冊:2002-10-09 發送簡訊給我 |
===================引 用 myemail 文 章=================== 不合理. 那D2007 dbExpress SQL 2005不就成最遭糕的解決方案? 建議把每個元件的重要屬性或程式碼貼上來. 大家一起討論討論. -------------------------- 我是不覺得我的問題會讓 D2007 dbExpress SQL 2005成為最遭糕的解決方案啦 還原我當時的問題您也可以試試看 SQLConnection SQLDataSet DataSetProvider ClientDataSet 連接sql server 2005 全部使用預設值 如果你把TDataSetProvider 的 ResolveToDataSet 改為 True 或者是再 CDS applyupdates 時把 SQLDataSet 的 Active 設為 true 都會出現如前述之錯誤無(一樣的設定, 用 ADO 沒遇過..) |
myemail
一般會員 發表:1 回覆:6 積分:1 註冊:2007-01-11 發送簡訊給我 |
我的意思是, dbExpress是Borland的強項, 它強調的就是效率與延展性. 試想, 假如更新還要先把SQLDataSet先關掉在打開, 那不是很奇怪嗎? 假如SQLDataSet裡是數量很多的記錄呢? 然後每更新一次, 就要重讀一次, 這還得了?
1.基本上, dbExpress元件都是單向唯讀的資料集, 所以, ResolveToDataSet 沒有理由改成True. 因為你是用DataSetProvider去更新資料, SQLDataSet只負責提供資料源而以, 我是不曉得您在什麼場合要用到把ResolveToDataSet改成Ture? 2.再來, ClientDataSet去下ApplyUpdates, 更本不用去管SQLDataSet的Active屬性是True或False. 換言之, 我是沒遇到您說的問題啦. THANKS! ===================引 用 feng 文 章=================== ===================引 用 myemail 文 章=================== 不合理. 那D2007 dbExpress SQL 2005不就成最遭糕的解決方案? 建議把每個元件的重要屬性或程式碼貼上來. 大家一起討論討論. -------------------------- 我是不覺得我的問題會讓 D2007 dbExpress SQL 2005成為最遭糕的解決方案啦 還原我當時的問題您也可以試試看 SQLConnection SQLDataSet DataSetProvider ClientDataSet 連接sql server 2005 全部使用預設值 如果你把TDataSetProvider 的 ResolveToDataSet 改為 True 或者是再 CDS applyupdates 時把 SQLDataSet 的 Active 設為 true 都會出現如前述之錯誤無(一樣的設定, 用 ADO 沒遇過..) |
feng
一般會員 發表:13 回覆:34 積分:14 註冊:2002-10-09 發送簡訊給我 |
===================引 用 myemail 文 章=================== 我的意思是, dbExpress是Borland的強項, 它強調的就是效率與延展性. 試想, 假如更新還要先把SQLDataSet先關掉在打開, 那不是很奇怪嗎? 假如SQLDataSet裡是數量很多的記錄呢? 然後每更新一次, 就要重讀一次, 這還得了? 1.基本上, dbExpress元件都是單向唯讀的資料集, 所以, ResolveToDataSet 沒有理由改成True. 因為你是用DataSetProvider去更新資料, SQLDataSet只負責提供資料源而以, 我是不曉得您在什麼場合要用到把ResolveToDataSet改成Ture? 2.再來, ClientDataSet去下ApplyUpdates, 更本不用去管SQLDataSet的Active屬性是True或False. ========================== 1.我原先用 ADO 連 MSSQL 所以選擇 ResolveToDataSet = true 2.我會是需要更改 sql 指令 所以必須讓 sqldataset 重新執行讀取新的 data , 而不是因為要用cds applyupdates 所以開sqldataset 您所說的都對 可惜當我提出這問題時 沒得到您的建議 不過如果讓我那"錯誤的做法"當然就會得到我所說的結果 |
myemail
一般會員 發表:1 回覆:6 積分:1 註冊:2007-01-11 發送簡訊給我 |
Sorry, 我不曉得您的問題是否解決? 所以參與討論! 有錯請告訴我!
1. 同意, 用ADO把ResolveToDataSet = true, 這OK! 不過用成False應該也是可以的! 2.您說的第2點---> "我會是需要更改 sql 指令 所以必須讓 sqldataset 重新執行讀取新的 data , 而不是因為要用cds applyupdates 所以開sqldataset", 我不是很清楚. 您的意思是需要將資料庫上的最新的資料從新下載到ClientDataSet嗎? 假如是這樣的話, 我也是直接在ClientDataSet做Close與Open; 或者是Refresh. 不過用Refresh時, 欄位物件裡的一些Flag要設對, 否則會出錯. 換句話說, 您是不用去管SQLDataSet的Active屬性的. Why? 若您的SQLDataSet是數於3-Tier的AP層, 您在Client端應該看不到這個物件吧? THANKS! ===================引 用 feng 文 章=================== ===================引 用 myemail 文 章=================== 我的意思是, dbExpress是Borland的強項, 它強調的就是效率與延展性. 試想, 假如更新還要先把SQLDataSet先關掉在打開, 那不是很奇怪嗎? 假如SQLDataSet裡是數量很多的記錄呢? 然後每更新一次, 就要重讀一次, 這還得了? 1.基本上, dbExpress元件都是單向唯讀的資料集, 所以, ResolveToDataSet 沒有理由改成True. 因為你是用DataSetProvider去更新資料, SQLDataSet只負責提供資料源而以, 我是不曉得您在什麼場合要用到把ResolveToDataSet改成Ture? 2.再來, ClientDataSet去下ApplyUpdates, 更本不用去管SQLDataSet的Active屬性是True或False. ========================== 1.我原先用 ADO 連 MSSQL 所以選擇 ResolveToDataSet = true 2.我會是需要更改 sql 指令 所以必須讓 sqldataset 重新執行讀取新的 data , 而不是因為要用cds applyupdates 所以開sqldataset 您所說的都對 可惜當我提出這問題時 沒得到您的建議 不過如果讓我那"錯誤的做法"當然就會得到我所說的結果 |
feng
一般會員 發表:13 回覆:34 積分:14 註冊:2002-10-09 發送簡訊給我 |
===================引 用 myemail 文 章=================== Sorry, 我不曉得您的問題是否解決? 所以參與討論! 有錯請告訴我! 1. 同意, 用ADO把ResolveToDataSet = true, 這OK! 不過用成False應該也是可以的! 2.您說的第2點---> "我會是需要更改 sql 指令 所以必須讓 sqldataset 重新執行讀取新的 data , 而不是因為要用cds applyupdates 所以開sqldataset", 我不是很清楚. 您的意思是需要將資料庫上的最新的資料從新下載到ClientDataSet嗎? ===================== 1.問題在第二篇時已經解決囉 2.譬如說 第一次找cusid為96001的資料然後傳給使用者, 接著如果要改找96002的交易資料, 那就更改 adodataset 的 commandtext 再傳給使用者 我之前的問題是: 先將adodataset.active := true 然後再讓 cds.active := true 事實上只需要 acs.active := 就可以了 之前用 ado 沒特別注意到這個問題 也可以正確運作 改成 dbExpress 之後 當把 adodataset 跟 ado 一起 active 並執行 cds.applyupfates 時就會出錯囉 謝謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |