• ベストアンサー

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を使って、 プロシージャの途中でまたエラーで停止するような命令はない のでしょうか? 教えていただけると幸いです。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

レコードセットをオープンして RecordCountが0の場合 カレントレコードが存在しないと判断してもいいようですよ On Error Resume Nextを途中で解除したいのであれば On Error Goto 0 を実行すればいいです ただしOn Error Goto 0 を実行した後はErrオブジェクトもリセットされてしまうのでエラーが起きたかどうかは Goto 0を実行する前に判断しないといけません

angband
質問者

お礼

ご回答ありがとうございます。 レコードセット取得後、MoveFirstなどのプロシージャを使う前に RecourdCountプロパティを参照して処理を変えることで望んでいた 動作を行うことができました。 また On Error Goto 0 についても教えていただいてありがとう ございます。これを使えば各所でいびつになっていたコードを すっきりさせることができそうです。

その他の回答 (1)

回答No.2

Recordset オブジェクトの BOF や EOF プロパティについて調べてみましょう。 http://www.accessclub.jp/dao/10.html

angband
質問者

お礼

ご回答ありがとうございます。 Cは慣れているのですがVBScriptは初めてでしたので、 BOFには驚きました。Cにはないですがとても便利そうです。 オブジェクト内のコレクションの最初を表すのに BOF(Begin Of File)を使うと、Fileじゃないのに・・ とちょっと違和感がありますがWindows流儀では 普通のことなのかもしれないと慣れようと努力します。

関連するQ&A