タイトル : Re^3: エラーになっても処理を続行させたい 投稿日 : 2008/07/27(Sun) 13:04 投稿者 : 魔界の仮面弁士
> Visual Basic のエラー処理をもう一度確認します。 具体的には、MSDN ヘルプファイルの下記の項目です。 [Visual Basic ドキュメント] ├[Visual Basic の使用方法] │└[プログラミング ガイド] │ └[Visual Basic を使ってできること] │ └[コードのデバッグおよびエラー処理]☆ │ ├[エラーの処理方法]★ │ ├[エラー処理ルーチンの構成]★ │ ├[エラー処理ルーチンの階層]★ │ ├[エラーの生成]★ │ ├[インライン エラー処理]★ │ ├[エラーの集中処理]★ │ └[エラー処理の無効化]★ └[リファレンス] └[ランゲージ リファレンス] └[ステートメント] ├[I-P] │└[On Error ステートメント]★ └[R-Z] └[Resume ステートメント]★ > 今回Loopの前に記述する必要があるように思えるのですが、 事前に記述するのは、エラートラップの指示(On Error GoTo 〜)だけです。 先にも書きましたように、エラー処理本体そのものは、 プロシージャ内であれば、どこに記述しても構いません。 > If分岐でエラーコード判定を行ったほうがすっきり書けますかね・・・? エラー処理が発生する可能性がある部分を、別のプロシージャにしておくことで 処理手順を整理できる可能性があります。 で。今回のコードの場合、下記のような点についても見直しておくべきかと。 ・そもそも、ループ中にどのようなエラーが発生することが想定されているのか。 (エラーを事前に想定せず、無計画にトラップするのは避けるべきです) ・ループのたびに、バインド変数の削除と登録をやり直す必要は無いのでは、 ループ前に登録、ループ中はValue の書き換えのみ、ループ後に削除、とか。 ・各 SQL の内容は固定的なので、ループ中で再生成したり、一つの sSQL 変数を 使いまわしてたりするのではなく、すべてループ前に用意しておいた方が良いのでは。 ・objRst は編集しないのだから、DbCreateDynaset を 0& で呼ぶ必要は無いのでは。 たとえば、12&(ORADYN_NOCACHE Or ORADYN_READONLY) とか。 ・この処理をループ処理せずに実現できる方法は無いのか? たとえば、MERGE 命令などを用いて、より効率のよい記述をできないか。 ・最後の RecordCount 処理を、SELECT COUNT(*) に修正すべき。 今のコードだと、ABC 列の値を読み捨てる結果になるので、効率が悪いです。 |