- ベストアンサー
VBScriptでレコードがない場合エラーになる
VBScriptを使ってHTAを作っています。 ちょっと疑問なのですが、以下のようなコードでレコードがないと 「カレントレコードがありません」というエラーになってしまいます。 txtSQL = "SELECT * FROM test" Set rs = db.OpenRecordSet(txtSQL) ' dbはDAOのデータベースオブジェクト プロシージャで On Error Resume Nextすればエラーになりませんが、 そうなるとありえる全エラーをErrオブジェクトを使ってcatchしないと いけなくなり面倒です。 On Error Resume Nextなしで、ありえるエラーの中で特定のものを (今回は「カレントレコードがない」エラーです)エラーでなくす ことはできないのでしょうか? または プロシージャの中で On Error Resume Nextを使って、 プロシージャの途中でまたエラーで停止するような命令はない のでしょうか? 教えていただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
レコードセットをオープンして RecordCountが0の場合 カレントレコードが存在しないと判断してもいいようですよ On Error Resume Nextを途中で解除したいのであれば On Error Goto 0 を実行すればいいです ただしOn Error Goto 0 を実行した後はErrオブジェクトもリセットされてしまうのでエラーが起きたかどうかは Goto 0を実行する前に判断しないといけません
その他の回答 (1)
- temtecomai2
- ベストアンサー率61% (656/1071)
Recordset オブジェクトの BOF や EOF プロパティについて調べてみましょう。 http://www.accessclub.jp/dao/10.html
お礼
ご回答ありがとうございます。 Cは慣れているのですがVBScriptは初めてでしたので、 BOFには驚きました。Cにはないですがとても便利そうです。 オブジェクト内のコレクションの最初を表すのに BOF(Begin Of File)を使うと、Fileじゃないのに・・ とちょっと違和感がありますがWindows流儀では 普通のことなのかもしれないと慣れようと努力します。
お礼
ご回答ありがとうございます。 レコードセット取得後、MoveFirstなどのプロシージャを使う前に RecourdCountプロパティを参照して処理を変えることで望んでいた 動作を行うことができました。 また On Error Goto 0 についても教えていただいてありがとう ございます。これを使えば各所でいびつになっていたコードを すっきりさせることができそうです。