ADO接続でデータベース(Access)にレコードのUpdateを
行ったのですが,キー重複のときの'except'が実行されません。
プログラムでエラーメッセージを表示させたいのですが
デバッガ例外で停止してしまいます。
度々お世話になりますが,よろしくお願いします。
try
DBCon := CreateOleObject('ADODB.Connection');
DBRds := CreateOleObject('ADODB.Recordset');
DBCon.Open(cDBOpen);
DBRds.CursorLocation := 3;
DBRds.Open('テーブル名', DBCon, 3, 3);
DBRds.AddNew;
DBRds.fields['gno'] := 12345;
try
DBRds.UpDate; <----停止
except
On EOleException do MessageDlg('Error-Message',mterror,[mbok],0);
end;
finally
DBRds.Close;
DBCon.Close;
DBRds := Unassigned;
DBCon := Unassigned;
end;
> On EOleException do MessageDlg('Error-Message',mterror,[mbok],0);
こっちでも捕まらない?
On E.Exception do MessageDlg(E.Message,mterror,[mbok],0);
発生しているエラーが、EOleException じゃないだけとか?
早々のご返事ありがとうございます。
'else'も試してみましたがダメでした。
デバッガ例外のダイアログには間違いなく'EOleException'となっており
'else'でも引っかからないとなるとコーディングのしかたが悪いのか。
ちょっといじってみます。
try
DBRds.UpDate; <--- やっぱり停止
except
on EOleException do MessageDlg(E.Message,mterror,[mbok],0);
on E: Exception do MessageDlg(E.Message,mterror,[mbok],0);
else
MessageDlg('E.Message',mterror,[mbok],0);
end;
exceptでハンドルしようとしまいと、デバッガ例外での停止は「その前に」発生します。
そのままF9で続行すればexcept内の処理が行われるはずですよ。
デバッガ例外で止まるのはあくまでデバッガで実行している時だけで
exeを直接実行する分には発生しないので、普通は気にする必要はありません。
で、デバッグ中にいちいち例外で止まってほしくないという場合は、
ツール - デバッガオプション - 言語固有の例外で
「無視する例外の種類」に放り込んでください。
'ofz','ttt'さん,ご回答ありがとうございます。
'ttt'さんのゆうとおり'F9'でメッセージが表示されました。
デバッガの使い方を知らなかった私が原因でした。
ツイート | ![]() |