
DB2のデーターベースに、ADOで接続して、レコードを取得していますが、同じ事をして、取得出来るときと、できないときがあります。
できない時は、objRec.EOF=true
になり、処理が終了してしまいます。
誰が、この原因の探り方や、ヒントなどわかる人がいたら、教えていただけませんでしょうか。
以下、ソースの引用
Set objCon = WScript.CreateObject("ADODB.Connection")
strCon="DSN=mans;UID=admin;PWD=pass"
objCon.Open strCon
Set objRec=CreateObject("ADODB.Recordset")
objRec.Open strSQL, objCon, adOpenStatic
If objRec.EOF Then
Wscript.Echo "no data!"
WScript.quit
End If
後の処理に進む
No.4ベストアンサー
- 回答日時:
scriptから実行したことがないので、エラー内容がよくわかりませんが、
一度目でできなくてその後できるようになるというのは、timeoutを食らっている可能性があると思います。
objCon.ConnectionTimeout
の値を倍くらいに設定してみたら何か変わりますか?
若しくは、VB(A)から同じコードを投げたら、別のエラーメッセージが帰ってきますか?
お返事が遅れましてすみませんでした。
仕事で忙しくてなかなか回答を確認する時間がありませんでした。
おっしゃるとおり、接続タイムアウトの時間が短かったのが原因だったです。
ご指摘の通り、その設定を私の場合は、360秒と長くするとこの現象はなくなりました。
No.3
- 回答日時:
今までは何ともなかったが突然
生じるようになったのならば
DB2やプログラムの問題ではなく、
別の問題でしょうね。あるいは
端末のOSに問題がある場合もありうる
ということもちらっと浮びます。VISTA
での挙動は時折耳にします。当方は
MySQL、PostgreSQL、XPなので再現はできま
せん。すこし前もレコードセットを
VISTAに落とす時の挙動についてここで
書き込みをしています。
vbsのバージョン、ADOや他のミドルウエア
の問題まで考えるのかというところですかね。
No.2
- 回答日時:
1番目と3番目はあまり意味のない
ものかもしれません。目的は
MoveFirstが機能し、かつカレント
レコードがない場合にエラーを
返すかがポイントです。
そのうえでMoveFirstでカレント
レコードの位置を先頭にもっていき、
質問のEOFがTrueとならないように
でき、次の処理行くことができる
ようにする、ということです。
したがって、本命は2番目の方法が
機能するかです。
これで対処できなければまったく
別の問題があるのではと思います。
この回答への補足
ご回答有難うございました。おっしゃる事はよくわかります。ただ、わたしのばあい、一回vbsファイルを実行してレコードが取れず、その同じファイルを直ぐに実行すると、二回、三回実行するうちに、レコードが取得出来たりするんです。別のSQLツールでレコードが取得できるのを確認した上で、実行してます。
こんな、へんな動きをするのはいま迄見た事がありません。
割り込みが発生したというエラーがでた事もありますが、このエラーの原因は一つとは限らないようです。
私が作ったプログラムでは、最初、レコードが取得出来ない時にも、もMoveFirstを実行しようとしてたので、発生したように思います。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つ以上のテーブルをUNIONする...
-
データの二重表示の原因
-
Accessの重複クエリで最小以外...
-
数百万件レコードのdelete
-
Accessにインポートしたら並び...
-
SQLServerで同一条件レコードの...
-
Accessで重複したデータを一件...
-
Accessでレコードが更新された...
-
(ACCESS)並び替えをしないで...
-
Access 1レコードずつcsvで出力...
-
Accessでの排他制御
-
OUTER JOIN と TOP10との組み合...
-
「マスタ」と「テーブル」の違...
-
ACCESS2007 フォーム 「バリア...
-
accessで移動平均する方法
-
ACCESSのSQLで、NULLかNULLでな...
-
インデックスの再構築の意味っ...
-
sqlserverで集計結果をUPDATEし...
-
SQLServer2005でフラットファイ...
-
seoについておしえてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3つ以上のテーブルをUNIONする...
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
Access 削除クエリが重い
-
Access VBA Me.Requery レコー...
-
ACCESSのBookmarkプロパティの...
-
SQLデータ修正時に『このレコー...
-
テーブルのレコード削除ができ...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
ManagementStudioからのデータ削除
-
Access 1レコードずつcsvで出力...
-
Accessで重複したデータを一件...
-
(ACCESS)並び替えをしないで...
-
Access カレントレコードがあり...
-
SQLServerで同一条件レコードの...
-
レコードロックする方法
-
DB2のデーターベースに、ADOで...
-
Accessでレコードが更新された...
-
非連結サブフォームのレコード...
おすすめ情報