如何當程式讀到無法解析的資料時,跳到下一行繼續執行 |
尚未結案
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
1. 使用 try-except 方式來處理錯誤, 讓程式繼續往下做
for i :=0 to MaxCount do begin try ... //Process log //Do Database action ... except on E:Exception do begin ... ... end; end; end;2.改用WideString 來處理資料, 建議採用 TntWare 等支援Unicode 的元件 裡面有很多可以取代Delphi 內建的函式, 如 Copy, Pos...等常用函式 3.資料庫中欄位設定為 nChar , nVarChar 等之類的 Unicode 型態 避免無法塞入資料 發表人 - chris_shieh 於 2004/12/23 15:28:39 |
shinjie
資深會員 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
if OpenDialog1.execute then
Edit4.text:=OpenDialog1.filename;
list:=Tstringlist.create;
list.LoadFromFile(Edit4.text);
for i:=0 to list.count-1 do
begin
try
If temsql.Active Then
temsql.Close;
temsql.SQL.Clear;
temsql.SQL.Add('INSERT INTO MAILBODY (script) VALUES ' '(' Quotedstr(list.strings[i]) ')');
temsql.SQL.text;
temsql.ExecSQL;
except on E:Exception do
...
...
...
End; 不好意思!
我想再問的詳細一點,
我希望程式不abort的目地,
是想要程式跳過無法解析的那一行,
迴圈能跳到下一行繼續從log檔中讀出再寫入資料庫裡,
有解決的辦法嗎?
請不吝指教,謝謝!
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
你改的已經可以達到你說的目的了
if OpenDialog1.execute then begin Edit4.text:=OpenDialog1.filename; list:=Tstringlist.create; list.LoadFromFile(Edit4.text); for i:=0 to list.count-1 do begin try If temsql.Active Then temsql.Close; temsql.SQL.Clear; temsql.SQL.Add('INSERT INTO MAILBODY (script) VALUES ' '(' Quotedstr(list.strings[i]) ')'); tempsql.Execute;//[red] 如果這裡出錯, 會跳至下面區塊處理 except on E:Exception do begin ...//處理錯誤訊息 ...//處理完之後會繼續處理for-loop下一步 end; End; end; end;PS. 程式碼前後記得加上[ code ] [ /code ] 發表人 - chris_shieh 於 2004/12/23 17:25:55 |
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
是請您在貼程式碼上來時 記得前後加上以利編排
並不是在程式中加入 如果不確定出錯的地方就把try except 包的範圍擴大
或是用F7一步步執行看問題出在那裡
在IDE編輯環境下Exception 會跳出Exception 對話框暫停執行
按下F9可以繼續執行
if OpenDialog1.execute then begin try Edit4.text:=OpenDialog1.filename; list:=Tstringlist.create; list.LoadFromFile(Edit4.text); except //是這裡出錯嗎 end; for i:=0 to list.count-1 do begin try If temsql.Active Then temsql.Close; temsql.SQL.Clear; temsql.SQL.Add('INSERT INTO MAILBODY (script) VALUES ' '(' Quotedstr(list.strings[i]) ')'); tempsql.Execute;//[red] 如果這裡出錯, 會跳至下面區塊處理 except on E:Exception do begin ...//處理錯誤訊息 ...//處理完之後會繼續處理for-loop下一步 end; End; end; end; |
kenspc
一般會員 發表:1 回覆:20 積分:4 註冊:2004-12-09 發送簡訊給我 |
引言: try If temsql.Active Then temsql.Close; temsql.SQL.Clear; temsql.SQL.Add('INSERT INTO MAILBODY (script) VALUES ' '(' Quotedstr(list.strings[i]) ')'); tempsql.Execute;//[red] 如果這裡出錯, 會跳至下面區塊處理 except on E:Exception do begin ...//處理錯誤訊息 ...//處理完之後會繼續處理for-loop下一步 end; End;給一個建議: try If temsql.Active Then temsql.Close; temsql.SQL.Clear; temsql.SQL.Add('INSERT INTO MAILBODY (script) VALUES ' '(' Quotedstr(list.strings[i]) ')'); tempsql.Execute;//[red] 如果這裡出錯, 會跳至下面區塊處理 except // on E:Exception do 可以省略掉, 反正你的目的是要跳過,不是嗎? //begin 這也可以省略掉 ...//處理錯誤訊息 ...//處理完之後會繼續處理for-loop下一步 //end; 這也可以省略掉 end; |
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
引言: try ... ... temsql.ExecSQL; 錯在這一行 except end; 我在except中是沒寫程式,就算有寫程式,也是不會跳進來 為什麼?為什麼呢?你的情況是在哪一種狀況發生的呢? 是直接使用RUN那個按鈕去執行你的程式還是單獨執行程式發生的呢? 若是使用IDE上面的RUN而發生這種情況! 請tools=>debugger options=>language exceptions=>stop on delphi exceptions 將和取方塊取消 < >< > 另外你可以參考這個篇討論
------
Best Regards, Rex Chiu |
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |