如何擷取SQL的錯誤訊息 |
答題得分者是:hagar
|
may
一般會員 發表:32 回覆:26 積分:11 註冊:2003-02-11 發送簡訊給我 |
請問在Delphi中如何取的SQL傳來的錯誤訊息,來判斷是何種錯誤呢?
例如在SQL中的Proj_State table有設primary key,如果Insert相同的值
就會出現以下的錯誤提示訊息,那在Delphi中如何擷取相同的訊息呢?
'Proj_State' table
- Unable to create index 'PK_Proj_State'.
ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]CREATE UNIQUE INDEX terminated because a duplicate key was found. Most significant primary key is '92-2626-E-231-006--01 '.
[Microsoft][ODBC SQL Server Driver][SQL Server]Could not create constraint. See previous errors.
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
may
一般會員 發表:32 回覆:26 積分:11 註冊:2003-02-11 發送簡訊給我 |
程式是在按下Button後執行,雖說這樣可截取到錯誤訊息,但是我的需求如下,謝謝!!
1.可判斷錯誤發生的原因再來自訂顯示的錯誤訊息
2.我發現假設我要Insert 10筆資料,如在第5筆發生錯誤時,就會停掉,那接下來的資料也沒辦法Insert進去了,可否讓程式繼續執行完,最後只要告訴使用者哪筆沒有成功即可。 for i:=1 to Table1.Recordset.RecordCount do begin try
Insert資料到另一個Table
except
on E: EDatabaseError do
ShowMessage(E.Message);
end;
Table1.Next ;
end;
showmessage ('共完成了' inttostr( Table1.Recordset.RecordCount) '筆' );
end
else
showmessage ('查無資料!!' );
end;
|
breeze_1
一般會員 發表:33 回覆:72 積分:21 註冊:2003-05-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.在要 Insert 一筆之資料前就先做檢查,
而非讓程式自己觸發 Error, 這樣比較好做控制
2.
var iCount: integer; begin iCount := 0; for i:=1 to Table1.Recordset.RecordCount do begin try // Insert資料到另一個Table Inc(iCount); except Memo1.Lines.Add(Tabel1.FieldByName('ID').AsString ' Insert 失敗'); end; Table1.Next; end; ShowMessage('共完成了' IntToStr(iCount) '筆' ); end;--- 歡迎光臨 KTop 研究院--<-<-<@ |
may
一般會員 發表:32 回覆:26 積分:11 註冊:2003-02-11 發送簡訊給我 |
|
may
一般會員 發表:32 回覆:26 積分:11 註冊:2003-02-11 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
may
一般會員 發表:32 回覆:26 積分:11 註冊:2003-02-11 發送簡訊給我 |
謝謝hagar的回答,我整理了一下:
另外再請教一個問題當新增到Memo時,如果長度及筆數太多時,要如何出現上下跟左右的捲軸呢?
//先宣告一個 Function 來檢查計劃編號是否重覆
// Function Check(plan_no:string):Boolean; procedure TForm10.Button2Click(Sender: TObject);
var
i,iCount:integer; begin if Table1.Recordset.RecordCount <>0 then begin for i:=1 to Table1.Recordset.RecordCount do begin
plan_no:= trim(Table1.FieldByName('plan_no').AsString) ;
IF Check(plan_no)=true then //到Function去檢查計劃編號是否重覆
Memo1.Lines.Add('計劃編號: ' Table1.FieldByName('plan_no').AsString '資料重覆!! 新增失敗')
Else
Begin
新增資料到另一個Table
Inc(iCount);
end;
Table1.Next ;
end ;
ShowMessage('共完成了' IntToStr(iCount) '筆' );
end
else
showmessage ('查無資料!!' );
end; Function Check(plan_no:string):Boolean;
begin
//利用 ADOQuery1去檢查傳進來到計劃編號是否已經存在,如果已經存在就回傳True的布林值
IF ADOQuery1.Eof=False then
result :=true;
End ;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
Memo1.Scrollbars := ssBoth; // 水平跟垂直的 Scrollbars 都出現
Memo1.Scrollbars := ssNone; // 水平跟垂直的 Scrollbars 都不出現
Memo1.Scrollbars := ssHorizontal ; // 水平的 Scrollbars 出現
Memo1.Scrollbars := ssVertical; // 垂直的 Scrollbars 出現 ---
歡迎光臨 KTop 研究院--<-<-<@
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |