みなさんこんにちは
以下の内容で、OraDbs.LastServerErr = 0 で返ってきて、
エラーにならず非常に困っています。VBエラーにもなっていなかったです。
どなたかご存知の方教えていただけないでしょうか。
ログインはできており、SQLの部分は、間違いなく抽出できないSELECT文です。
'OO4Oオブジェクト変数の宣言
Public OraSes As OraSession
Public OraDbs As OraDatabase
Public OraDynWrk As OraDynaset
Set OraSes = CreateObject("OracleInProcServer.XOraSession")
Set OraDbs = OraSes.OpenDatabase("AAA", "BBB" & "/" & "CCC", 0&)
SQL = ""
SQL = " SELECT KKK FROM TTT "
SQL = SQL & " WHERE BBB = '" & TEXT1 & "'"
Set OraDynWrk = Nothing
Set OraDynWrk = OraDbs.CreateDynaset(SQL, 0&)
If OraDbs.LastServerErr <> 0 Then
If MsgBox("エラーです。", vbOKOnly + vbCritical) = vbOK Then
Exit Sub
End If
End If
> 以下の内容で、OraDbs.LastServerErr = 0 で返ってきて、
> エラーにならず非常に困っています。VBエラーにもなっていなかったです。
であれば、エラーではなく、正常に動作しているという事なのでは。
(そもそも、どのようなエラーを期待されているのでしょうか?)
> 間違いなく抽出できないSELECT文です。
抽出結果が0件になるというだけで、SQLとしては正常だったとか。
oo4oではCreateDynasetで「行が見つからない」のはエラーとはならないので、ダイナセットの EOF プロパティを参照するのが基本です。
エラーになるのは PL/SQLの SELECT INTO で行が見つからない場合などです。
例:
OraDbs.executeSQL "BEGIN SELECT KKK into :AAA FROM TTT WHERE BBB='" & TEXT1 & "'; END"
# ネットワーク障害など、実行時の外的な問題が原因でエラーが起きる場合が
# あるので、エラートラップ自体は必ず必要です。
# また、エラートラップの際に OraSes.LastServerErr と Errオブジェクトを
# チェックしていないのは問題があります。
# (OIP-XXXX系のoo4o内部エラーは Errを見ないと捕捉できません)。
返信ありがとうございます。
データが存在しない場合は、エラーで返ってこないのですね。
試しに、存在しないテーブル名を指定するとErrでエラーで
返ってきました。
おっしゃる通り、エラートラップをかけます。
ありがとうございました。
解決しました。
ツイート | ![]() |