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

資料刪除出現錯誤

尚未結案
ljgwst
一般會員


發表:6
回覆:6
積分:2
註冊:2003-12-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-14 11:35:03 IP:203.70.xxx.xxx 未訂閱
各位大大 我是用UpdateSQL原件來刪除資料 但是卻出現'Table is Read Only' 幫幫我吧
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-14 11:39:58 IP:210.243.xxx.xxx 未訂閱
建議 把詳細的設定列出來 好讓 更多朋友能有機會協助您
ljgwst
一般會員


發表:6
回覆:6
積分:2
註冊:2003-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-14 11:55:11 IP:203.70.xxx.xxx 未訂閱
謝謝大大 我是用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-17 10:23:09 IP:211.22.xxx.xxx 未訂閱
我也是面臨這個問題, 我的環境是採用 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-17 10:28:18 IP:211.22.xxx.xxx 未訂閱
後來過連番的測試, 修改程式碼之後. 就解決了會出現 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-17 13:20:54 IP:211.22.xxx.xxx 未訂閱
再補充一下, 這個狀況的解決方式必須是在 qy_m.OnUpdateError 沒有設定才可行. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-17 13:28:24 IP:211.22.xxx.xxx 未訂閱
後來在仔細研究相關的 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/
系統時間:2024-05-05 18:53:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!