資料刪除出現錯誤 |
尚未結案
|
ljgwst
一般會員 發表:6 回覆:6 積分:2 註冊:2003-12-11 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
ljgwst
一般會員 發表:6 回覆:6 積分:2 註冊:2003-12-11 發送簡訊給我 |
謝謝大大 我是用master_detail的方式撰寫程式,
並且將query連結UpdateSQL原件
當我新增或修改資料時
程式都正常
但當我刪除資料時
表身query.ApplyUpdates會出現'Table is Read Only'錯誤 程式如下: QRY_DT.FIRST;
WHILE NOT QRY_DT.EOF DO
BEGIN
QRY_DT.DELETE;
END;
HERTS_DM.DatabaseHerts.StartTransaction;
TRY
QRY_DT.ApplyUpdates;
HERTS_DM.DatabaseHerts.Commit;
except
ONE_MESSAGE(' 程式執行確認 ',' SORRY ! 刪除失敗 ',1);
QRY_DT.CANCELUPDATES;
HERTS_DM.DatabaseHerts.Rollback;
Raise;
end;
QRY_DT.CommitUpdates; 不知大大是否了解
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
我也是面臨這個問題, 我的環境是採用 Delphi 5 連接MSSQL
元件使用 TQuery + TUpdateSQL , 在作編輯或是刪除處理時,
若是在 UpdateSQL.ModifySQL 或是 UpdateSQL.DeleteSQL 所下的 SQL 命令會1異動到一筆以上紀錄的話,
BDE 會判定為更新失敗產生錯誤例外,
但是丟出 Update failed 錯誤例外後,
會再丟出一個 Table is read only 的錯誤例外,
不知道該怎麼處理這個多出來的訊息, 我的部分原始碼如下:
qy_m.CachedUpdate := true; qy_m.RequestLive := false; procedure TFD0200.qy_mUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); begin try ud_m.SetParams(UpdateKind); ud_m.ExecSQL(UpdateKind); UpdateAction := uaApplied; except UpdateAction := uaFail; end; end; procedure TFD0200.qy_mAfterPost(DataSet: TDataSet); begin UpdateData; end; procedure TFD0200.UpdateData; begin qy_m.Database.StartTransaction; try try qy_m.ApplyUpdates; qy_m.Database.Commit; except qy_m.Database.Rollback; qy_m.CancelUpdates; raise; end; qy_m.CommitUpdates; end; end;我是雪龍 發表人 - bestlong 於 2005/01/17 12:36:48
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
後來過連番的測試, 修改程式碼之後.
就解決了會出現 Table is read only 的錯誤例外的問題
procedure TFD0200.qy_mUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); begin try ud_m.SetParams(UpdateKind); ud_m.ExecSQL(UpdateKind); UpdateAction := uaApplied; except UpdateAction := uaFail; raise; //加入此行 end; end;我是雪龍 發表人 - bestlong 於 2005/01/17 12:57:44
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
後來在仔細研究相關的 Help , 發現上面的修改方式並不正確.
其實重點是在 UpdateAction 的指定:
1. uaAbort: 中止更新, 不會產生錯誤訊息
2. uaFree : 中止更新, 產生錯誤訊息
procedure TFD0200.qy_mUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); begin try ud_m.SetParams(UpdateKind); ud_m.ExecSQL(UpdateKind); UpdateAction := uaApplied; except UpdateAction := uaAbort; //修改此行 end; end;我是雪龍 發表人 - bestlong 於 2005/01/17 13:43:26
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |