• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DB2のデーターベースに、ADOで接続して、レコードを取得していますが)

DB2のデータベースにADO接続時のレコード取得できないときの原因と対処方法

このQ&Aのポイント
  • DB2のデータベースにADOで接続して、レコードを取得していますが、取得できない場合の原因や対処方法を知りたいです。
  • DB2のデータベースにADOで接続して、レコードを取得していますが、取得できない場合にはobjRec.EOFがtrueになり、処理が終了してしまいます。この問題の解決方法を教えてください。
  • DB2のデータベースにADOで接続して、レコードを取得しているのですが、何らかの原因で取得できない場合があります。objRec.EOFがtrueになる場合にはどのように対処すれば良いのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.4

scriptから実行したことがないので、エラー内容がよくわかりませんが、 一度目でできなくてその後できるようになるというのは、timeoutを食らっている可能性があると思います。 objCon.ConnectionTimeout の値を倍くらいに設定してみたら何か変わりますか? 若しくは、VB(A)から同じコードを投げたら、別のエラーメッセージが帰ってきますか?

humipinedesu
質問者

お礼

お返事が遅れましてすみませんでした。 仕事で忙しくてなかなか回答を確認する時間がありませんでした。 おっしゃるとおり、接続タイムアウトの時間が短かったのが原因だったです。 ご指摘の通り、その設定を私の場合は、360秒と長くするとこの現象はなくなりました。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

今までは何ともなかったが突然 生じるようになったのならば DB2やプログラムの問題ではなく、 別の問題でしょうね。あるいは 端末のOSに問題がある場合もありうる ということもちらっと浮びます。VISTA での挙動は時折耳にします。当方は MySQL、PostgreSQL、XPなので再現はできま せん。すこし前もレコードセットを VISTAに落とす時の挙動についてここで 書き込みをしています。 vbsのバージョン、ADOや他のミドルウエア の問題まで考えるのかというところですかね。

humipinedesu
質問者

お礼

お返事が遅れましてすみませんでした。仕事が忙しくなかなか見る暇がありませんでした。 丁寧なアドバイス、ありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

1番目と3番目はあまり意味のない ものかもしれません。目的は MoveFirstが機能し、かつカレント レコードがない場合にエラーを 返すかがポイントです。 そのうえでMoveFirstでカレント レコードの位置を先頭にもっていき、 質問のEOFがTrueとならないように でき、次の処理行くことができる ようにする、ということです。 したがって、本命は2番目の方法が 機能するかです。 これで対処できなければまったく 別の問題があるのではと思います。

humipinedesu
質問者

補足

ご回答有難うございました。おっしゃる事はよくわかります。ただ、わたしのばあい、一回vbsファイルを実行してレコードが取れず、その同じファイルを直ぐに実行すると、二回、三回実行するうちに、レコードが取得出来たりするんです。別のSQLツールでレコードが取得できるのを確認した上で、実行してます。 こんな、へんな動きをするのはいま迄見た事がありません。 割り込みが発生したというエラーがでた事もありますが、このエラーの原因は一つとは限らないようです。 私が作ったプログラムでは、最初、レコードが取得出来ない時にも、もMoveFirstを実行しようとしてたので、発生したように思います。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

DB2がADOをどこまでサポートしているかは わかりませんが、MoveFirstはサポート していると思いますので、 On Error Resume Next objRec.MoveFirst If objRec.EOF Then Wscript.Echo "no data!" WScript.quit End If On Error Goto 0 とするか、 On Error Resume Next objRec.Movefirst If Err.Number = 0 Then WScript.Echo "no data!" WScript.Quit End If On Error Goto 0 とするか、あるいは On Error Resume Next objRec.Movefirst If Err.Number = 0 Then WScript.Echo "no data!" WScript.Quit End If On Error Goto 0 On Error Resume Next If objRec.EOF Then Wscript.Echo "no data!" WScript.quit End If On Error Goto 0 と続けてみるかです。 として強制的にカレントレコードの 位置を最初のレコードにしたらどう でしょう。 レコードがなければエラーがでるし、 レコードがあればエラーナンバーは 0でIf文を抜けます。 エラーがなければOn Error Goto 0で On Error Resume Nextを無効化して 次に進みます。そのときはカレント レコードの位置は最初のレコードに 設定されています。 最初はOn Error Resume Nextと On Error Goto 0をはずして空の テーブルに対して実行してみて エラーが出るようであれば MoveFirstが機能しているいうことで もとに戻し、データのあるテーブルで 実行してみてください。 最初の方法は何か矛盾を含んで いますが。 こんなところです。ほかに何かあったかな。

関連するQ&A