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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
ACCESS 『DoCmd.OutputTo』に...
-
Access 1レコードずつcsvで出力...
-
Accessでの排他制御
-
データの二重表示の原因
-
2つの項目が重複するレコード...
-
Accessでのレコードの削除時の...
-
数百万件レコードのdelete
-
Access 抽出したレコードのうち...
-
SQLiteで最も古いレコードのみ...
-
非連結サブフォームのレコード...
-
SQLServerで同一条件レコードの...
-
Access VBA Me.Requery レコー...
-
SQLでの掲示板
-
時系列データの抜けの調べ方
-
ACCESS【更新クエリの中断がで...
-
Access カレントレコードがあり...
-
Accessのテーブルの結合
-
ACCESS VBA コマンドDoCmd.Open...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データの二重表示の原因
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
数百万件レコードのdelete
-
2つの項目が重複するレコード...
-
Access 1レコードずつcsvで出力...
-
Access VBA Me.Requery レコー...
-
ManagementStudioからのデータ削除
-
非連結サブフォームのレコード...
-
Accessで重複したデータを一件...
-
ACCESSのBookmarkプロパティの...
-
Access 削除クエリが重い
-
Accessでの禁止文字チェック
-
Access カレントレコードがあり...
-
SQLServerで同一条件レコードの...
-
Accessでの排他制御
-
ACCESS【更新クエリの中断がで...
-
SQLデータ修正時に『このレコー...
-
(ACCESS)並び替えをしないで...
-
ACCESSファイルを開こうとする...
おすすめ情報