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

請問try.......語法

尚未結案
jacosun
一般會員


發表:42
回覆:64
積分:21
註冊:2003-04-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-21 15:33:26 IP:61.59.xxx.xxx 未訂閱
在try....... except....end的語法裡, 若在try ..... except之間的運算(資料表的寫入、刪除等)若有發生錯誤 是不是能不把資料寫入或刪除呢。 請問該怎麼做?? 資料庫: ms-sql
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-21 16:04:44 IP:202.39.xxx.xxx 未訂閱
try
  // 做運算
  Table1.Post;
except
  // exception 處理
end;
以上面的例子來說 在做運算的過程中若發生 exception 即會跳到 except .. end 之間的 exception 處理 並不會執行 Table1.Post; 這行 也就不會存到資料庫了 -- 向 KTop 的弟兄們致敬!
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-21 16:12:29 IP:218.170.xxx.xxx 未訂閱
try ADOConnection1.BeginTrans; //資料處理 ADOConnection1.CommitTrans; EXCEPT ADOConnection1.RollbackTrans; SHOWMESSAGE('存檔失敗!'); END; 若發生錯誤,會執行RollbackTrans 就可取消所有 資料處理 內的所有異動動作 如(資料表的寫入、刪除等)....
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-21 17:15:17 IP:211.162.xxx.xxx 未訂閱
不好意思,插個花: try語句做爲輔助流程來控制程式的執行,經常與Abort,Exit等搭配使用。 先看看這個:

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if True then
      Abort;
  except    //Abort激發的異常被捕捉,因此執行except...end中的異常code
    ShowMessage('Abort');
  end;
  ShowMessage('處理完啦!');  //執行,因爲異常已被處理,如果使用try...finally,則句將不被處理
end;
說明:如果Abort被包含在一個try...except中,則只退出tr...except,然後執行except...end塊,最後在繼續執行下面的語句。如果包含在try...finally塊中,則執行finally...end塊然後退出過程 我們再來看看和Exit搭配

procedure TFrom1.Button2Click(Sender: TObject);
begin
  try
    if True then
      Exit;
  finally
    ShowMessage('Abort');       //執行
  end;
  ShowMessage('處理完啦');      //不執行
end;
這裏是用try…finally於之搭配,還可以與之搭配的有HltRunError 而和try經常一起使用的還有continuBreak,再來看看吧:

procedure TForm1.Button3Click(Sender: TOjbect);
var
  I: Integer;
begin
  for I := 0 to 2 do
  begin
    try
      if I < 2 then
        continue;     //請注意continue在這裏的作用
      ShowMessage(IntToStr(I));
    finally
      ShowMessage('這是finally哦!');
    end;
  end;
end;
continue如果位於try...finally塊中,則會首先執行finally...end再進入下一個迴圈。上面的例子執行結果是:首先顯示兩次'這是finally哦!'(分別對應I=0和1),然後再顯示一次I(對應I=2),最後再顯示一次I(還是對應I=2). 但是Break的用法又不太一樣了,它如果位於try...finally塊中,則finally...end塊也會得到執行,看下面:

procedure TForm1.Button4Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 2 do
  begin
    try
      if I > 0 then
        Break;
      ShowMessage(IntToStr(I));
    finally
      ShowMessage('這是在finally中');
    end;
  end;
end;
綜上所述,可以看出try...except...end和try...finally...end和Abort,Exit,Halt,RunError,Continue,Break的用法,請參考前面兩位元前輩所述,根據實際情況來實做!謝謝 ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
jacosun
一般會員


發表:42
回覆:64
積分:21
註冊:2003-04-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-22 09:47:50 IP:61.59.xxx.xxx 未訂閱
不過我用的是database 所以改成 try     database.BeginTrans;                //資料處理        database.Commit;  EXCEPT     database.RollbackTrans;     SHOWMESSAGE('存檔失敗!');  END; 應該ok!!小小測試過了  謝謝大大。 hagar版大...因為shinhrn大大的才是我想要的,所以分數就給shinhrn大大囉 而版大提供的  若今天我有Table1,Tabel2,Table3做運算,而Table1、Table2都ok也都post了,而Table3運算過程中出錯的話,應該只有Table3的資料表不會有更動吧      
引言: try ADOConnection1.BeginTrans; //資料處理 ADOConnection1.CommitTrans; EXCEPT ADOConnection1.RollbackTrans; SHOWMESSAGE('存檔失敗!'); END; 若發生錯誤,會執行RollbackTrans 就可取消所有 資料處理 內的所有異動動作 如(資料表的寫入、刪除等)....
< >< >
系統時間:2024-08-17 20:00:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!