VB6にてSQLを発行してエラーが出れば
on error goto にてエラー処理を行うようなプログラムを作成したのですが
WindowsXP環境では問題なくエラー処理が行われるのですが
Windows2003Serverではエラーを検知しないのか
エラー処理が行われません
2003Server上ではデバッグを行う事ができない為
どなたかこの様な症状を知っている方がいらっしゃいましたら
打開策をご教授お願いします。
ちなみにDBはoracle10gにリンクを張ったAccessMDBです
SQLの発行エラーを検知する部分では、
具体的には、どの様なコードを書いているのでしょうか?
そして、どの様なエラーが「検知できていない」と思われているのでしょうか?
>2003Server上ではデバッグを行う事ができない為
というのは正確でないかと。
VB6.0はWindowsServer2003でもインストールや実行が可能ですし、
問題判別のためにWindowsServer2003を本番系とは別に用意する等
方法があるはずですので、その他のなんらかの「書かれていない事情」を
転嫁しているに過ぎないかと。
本当にデバッグできない事情があるのであれば、
逐一詳細にトレースログを吐き出す
(極端に言えば、1行実行するごとにログを書く)
等で原因を探るようにしてみては如何でしょう?
>ちなみにDBはoracle10gにリンクを張ったAccessMDBです
・そのサーバではOracle10gへアクセス可能ですか?
・リンクテーブルで使用しているDSNは、そのサーバに定義してありますか?
等が気になりますが。
もげさん
返信ありがとうございます。
>SQLの発行エラーを検知する部分では、
>具体的には、どの様なコードを書いているのでしょうか?
>そして、どの様なエラーが「検知できていない」と思われているのでしょうか?
If Err <> 0 Then
goto Err_Process
End If
通常dao.executeにてSQL失敗すれば on error goto Err_Process
にてErr_Process:に飛ぶはずですが念のため上記のコードも記述しています。
わざとSQL文を間違えてエラーに飛ぶようにして
ファイルを作成するようにしているのですが
上記のファイルが作成されず
ログを見ると通常通りに処理がおこなわれているのです
>2003Server上ではデバッグを行う事ができない為
2003Serverにてデバッグを行える環境がないという意味です。
>そのサーバではOracle10gへアクセス可能ですか?
可能です。
>リンクテーブルで使用しているDSNは、そのサーバに定義してありますか?
>等が気になりますが。
もちろん定義しています。
> If Err <> 0 Then
Err 関数(あるいは Err.Number プロパティ)を利用する前には、
「On Error Resume Next」が必要ですが、実行してありますか?
あるいはこの行を実行する前に、「On Error Goto 0」を実行して、
エラートラップ処理を解除していませんか?
> goto Err_Process
エラー処理ルーチンにジャンプさせるなら、「On Error GoTo Err_Process」を使うべきかと。
魔界の仮面弁士さん
返信ありがとうございます。
>Err 関数(あるいは Err.Number プロパティ)を利用する前には、
>On Error Resume Next」が必要ですが、実行してありますか?
>あるいはこの行を実行する前に、「On Error Goto 0」を実行して、
>エラートラップ処理を解除していませんか?
一応ソースを見直しましたが問題ありませんでした。
>エラー処理ルーチンにジャンプさせるなら、「On Error GoTo Err_Process」を使うべきかと。
なるほど、エラーだけど明示的に飛ぶのでgoto のみでいいのかと思っていました。
ご指摘ありがとうございます。ちょっと試してみます。^^
実行環境が現地にしかないため結果が明日にしかでないのが残念です。
ん? あっOn Error Resume Next抜けてました
けどOn Error Resume Next処理を省いていた場合
Err関数は無視して
On Error GoTo Err_Processにてエラーが起きた時点で飛ぶはずですよね?
んー とりあえずOn Error Resume Nextに変更して
Err関数を使用したソースにしてみます。
ありがとうございました
> なるほど、エラーだけど明示的に飛ぶのでgoto のみでいいのかと思っていました。
GoTo で飛んだ場合、それは「エラー処理ルーチン」にはなりません。
たとえば、「Resume 0」「Resume Next」などの Resume〜系ステートメントを
実行できなくなってしまいます。
> On Error GoTo Err_Processにてエラーが起きた時点で飛ぶはずですよね?
エラー処理は、プロシージャ単位(≠サブルーチン単位)で行われるため、
たとえば下記で、★を Method1 から Method2 に変えると、結果も異なりますよね。
Option Explicit
Sub Form_Load()
On Error GoTo X
MsgBox Method1 '★
Exit Sub
X: MsgBox Err.Description
End Sub
Function Method1() As Single
Method1 = 1 / 0
End Function
Function Method2() As Single
On Error GoTo X
Method2 = 1 / 0
X:
End Function
ちょっと結果が遅くなりましたが
無事解決いたしました。
ありがとうございました