產生例外狀況程式卻不會中斷 |
缺席
|
marlon_wu
一般會員 發表:5 回覆:6 積分:2 註冊:2002-09-20 發送簡訊給我 |
以下為程式片斷, 執行 save 首先檢查可否存檔 (見fCheckIfCanSave)
檢查結果如果日期欄位空白, 引發例外狀況, 但程式執行完
raise Exception.Create('日期不得空白') 後並沒有中斷,
又執行了fCheckIfCanSave 的最後一行 Raise Exception.Create(ErrNoCheckFailRemark)
之後又回到 Save 執行最後一行 ExecSQL(sql, false);
之後Windows Show 出'日期不得空白'的錯誤訊息,
再來出現 EAccessViolation 的及 runtime error 216的錯誤
是那裡出錯? function TtsDutyDayReport.Save(MaxErrors: integer;
AutoTran: boolean): integer;
var sql, value: string;
begin
fCheckIfCanSave;
Result:=inherited Save(MaxErrors, AutoTran);
if (Result = 0) And SaveCheckedStatus then
begin
if Checked then
value:='1'
else
value:='0';
sql:='UPDATE ' fTableName
' SET ' m_Fields[FI_DD_CHECKED].field_name ' = ' value
' WHERE ' m_Fields[FI_DD_NO].field_name ' = ' '''' No '''';
ExecSQL(sql, false);
end;
end; procedure TtsDutyDayReport.fCheckIfCanSave;
begin
if DataSet.FieldByName(m_Fields[FI_DD_DATE].field_name).IsNull then
raise Exception.Create('日期不得空白');
if (DataSet.FieldByName(m_Fields[FI_DD_HOTELCOST].field_name).AsFloat > 0) And
DataSet.FieldByName(m_Fields[FI_DD_HOTELPRJ].field_name).IsNull then
raise Exception.CreateFmt(ErrNullMaPrj_s,[m_Fields[FI_DD_HOTELCOST].field_label]);
if (DataSet.FieldByName(m_Fields[FI_DD_MA1].field_name).AsFloat > 0) and
DataSet.FieldByName(m_Fields[FI_DD_MAPRJ1].field_name).IsNULL then
Raise Exception.CreateFmt(ErrNullMaPrj_s,[m_Fields[FI_DD_MA1].field_label]);
if (DataSet.FieldByName(m_Fields[FI_DD_MA2].field_name).AsFloat > 0) and
DataSet.FieldByName(m_Fields[FI_DD_MAPRJ2].field_name).IsNULL then
Raise Exception.CreateFmt(ErrNullMaPrj_s,[m_Fields[FI_DD_MA2].field_label]);
if (DataSet.FieldByName(m_Fields[FI_DD_MA3].field_name).AsFloat > 0) and
DataSet.FieldByName(m_Fields[FI_DD_MAPRJ3].field_name).IsNULL then
Raise Exception.CreateFmt(ErrNullMaPrj_s,[m_Fields[FI_DD_MA3].field_label]);
if (DataSet.FieldByName(m_Fields[FI_DD_MA4].field_name).AsFloat > 0) and
DataSet.FieldByName(m_Fields[FI_DD_MAPRJ4].field_name).IsNULL then
Raise Exception.CreateFmt(ErrNullMaPrj_s,[m_Fields[FI_DD_MA4].field_label]);
if fNeedCheckFailRemark then
if (Not Self.Checked) And (Self.CheckFailRemark='') then
Raise Exception.Create(ErrNoCheckFailRemark);
end;
|
marlon_wu
一般會員 發表:5 回覆:6 積分:2 註冊:2002-09-20 發送簡訊給我 |
|
marlon_wu
一般會員 發表:5 回覆:6 積分:2 註冊:2002-09-20 發送簡訊給我 |
|
marlon_wu
一般會員 發表:5 回覆:6 積分:2 註冊:2002-09-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |