try,exceptが実行されない

解決


東海岸  2008-03-28 14:35:42  No: 30298  IP: 192.*.*.*

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;

編集 削除
ofZ  2008-03-28 15:03:52  No: 30299  IP: 192.*.*.*

> On EOleException do MessageDlg('Error-Message',mterror,[mbok],0);
こっちでも捕まらない?
On E.Exception do MessageDlg(E.Message,mterror,[mbok],0);

発生しているエラーが、EOleException じゃないだけとか?

編集 削除
東海岸  2008-03-28 15:41:57  No: 30300  IP: 192.*.*.*

早々のご返事ありがとうございます。
'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;

編集 削除
ttt  2008-03-28 16:26:57  No: 30301  IP: 192.*.*.*

exceptでハンドルしようとしまいと、デバッガ例外での停止は「その前に」発生します。
そのままF9で続行すればexcept内の処理が行われるはずですよ。

デバッガ例外で止まるのはあくまでデバッガで実行している時だけで
exeを直接実行する分には発生しないので、普通は気にする必要はありません。
で、デバッグ中にいちいち例外で止まってほしくないという場合は、
ツール - デバッガオプション - 言語固有の例外で
「無視する例外の種類」に放り込んでください。

編集 削除
東海岸  2008-03-28 17:08:40  No: 30302  IP: 192.*.*.*

'ofz','ttt'さん,ご回答ありがとうございます。
'ttt'さんのゆうとおり'F9'でメッセージが表示されました。

デバッガの使い方を知らなかった私が原因でした。

編集 削除