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

sqlquery:cannot modify a read-only dataset的錯誤

答題得分者是:Mickey
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-20 16:33:56 IP:220.228.xxx.xxx 訂閱
各位好我是使用程式碼去CREATE元件去做有關DBEXPRESS去做動態連結INTERBASE
而我在做clientdataet.post都能正常執行但就是在做clientdataset.applyupdate(0);都會出現
project projectmanager.exe raised exception class EDatabaseError with message 'sqlquery:cannot modify a read-only dataset'. .......
而我去做sqlquery的modify判斷時也是唯讀的
想請教怎麼把sqlquery變成可去更新呢
我去找了很多資料都是有關ADO的元件寫法但我改來改去還是不行是否有前輩願指點一下感激不盡~
編輯記錄
nokia2005 重新編輯於 2008-06-24 14:44:47, 註解 無‧
taishyang 重新編輯於 2008-06-25 09:35:10, 註解 無‧
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-25 01:16:21 IP:59.173.xxx.xxx 未訂閱
,然后在Object InspectorRequestlive
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-25 13:35:48 IP:220.228.xxx.xxx 訂閱
您好 ~
因我是使用delphi7所以沒有此參數可設定
這方面我查了很多相關資料很多人也都這麼說但我是使用delphi7的~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-25 15:20:16 IP:218.163.xxx.xxx 訂閱
你好:

方便把 SQLQuery.SQL....內容 Po 上嗎 ?
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-06-25 15:44:06 IP:220.228.xxx.xxx 訂閱
版主您好我的程式碼是 
with ConnGlb do begin
DriverName:='interbase';
ConnectionName:='GLBDATA';
GetDriverFunc := 'getSQLDriverINTERBASE';
LibraryName := 'dbexpint.dll';
VendorLib := 'gds32.dll';
LoginPrompt:=false;
KeepConnection:=true;
LoadParamsFromIniFile('dbxconnections.ini');
end;
with sqlQuery do begin
SQL.Text:='select * from customer';
Name:='sqlQuery';
SQLConnection:=ConnGlb;
end;
with dsp do begin
dataset:=sqlQuery;
Name:='dsp';
dsp.UpdateMode:=upWhereAll;
ResolveToDataSet:=true; <==這改過FALSE和TRUE都一樣
Options:=[poAllowCommandText]; <==這一行也拿掉過也一樣
end;
with cds do begin
ProviderName:='dsp';
Name:='cds';
PacketRecords:=-1;
end;
DataSource1.DataSet:=cds;
cds.open;

儲存的部份
sqlquery.Active:=true;
cds.open;
if cds.ChangeCount>0 then
cds.ApplyUpdates(-1); <====我使用單部執行錯誤在這裡而以上在執行上都沒有問題
大約是這樣~
我是使用 interbase firebird delphi7
感謝~~





===================引 用 Mickey 文 章===================
你好:

方便把 SQLQuery.SQL....內容 Po 上嗎 ?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-06-25 16:09:28 IP:218.163.xxx.xxx 訂閱
你好:

customer table 是否有特殊的欄位?

建議

DatasetProvider.ResolveToDataSet:=False;
DatasetProvider.UpdateMode:=upWhereKeyOnly;

而 SQLQuery 的各 Field..要設定 ProviderFlags.(至少 Key 欄位要正確設定).
編輯記錄
Mickey 重新編輯於 2008-06-25 16:29:28, 註解 無‧
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-06-25 16:45:11 IP:220.228.xxx.xxx 訂閱
感謝版主您的回覆~
我依您的建議~
customer table 是否有特殊的欄位? <====沒有特殊欄位
DatasetProvider.ResolveToDataSet:=False; <====改成FALSE也是有錯誤
DatasetProvider.UpdateMode:=upWhereKeyOnly; <====改成upWhereKeyOnly也是有錯誤
而 SQLQuery 的各 Field..要設定 ProviderFlags.(至少 Key 欄位要正確設定). <==我沒有設定虛擬欄位~而且元件全是用CREATE建立而成

編輯記錄
nokia2005 重新編輯於 2008-06-25 16:50:47, 註解 無‧
nokia2005 重新編輯於 2008-06-25 16:51:21, 註解 無‧
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-06-26 09:42:32 IP:218.163.xxx.xxx 訂閱
你好:

我已沒有 D7 環境...現在用 D2007 也複製不出你的問題...

印象中...以前遇過這問題...好像是...改SQL解決的

試試看...

不要用 select *...乖乖的 select col1, col2....

TableName/ColumnName...大小寫都要對
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-06-26 09:49:38 IP:220.228.xxx.xxx 訂閱
感謝版主~您的建議我會試試看~感謝您給了我一個方向~謝謝!!!
系統時間:2024-04-30 4:29:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!