- ベストアンサー
VBScriptでのDBのエラー取得
- VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続してクエリを発行し、結果をファイルに出力するVBScriptを作成しています。
- SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ(Err.Number、Err.Description)を使用し、エラー番号と内容を取得していますが、SQL Serverから発行しているエラー番号、エラー内容を取得したいのですが、取得できません。
- どのようにすれば、データベース固有のエラーを取得ができますか。是非ご教示いただきたく、お手数をおかけ致しますが、宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Executeメソッドの実行件数を知りたいのですが、 >selectの場合は、抽出件数、updateの場合は更新件数を >0件なのか、1件以上なのかを知りたいのですが Select文を実行した場合は、ExecuteからRecordsetが返されるので、 set objRS = objADO.Execute(sql) ってやったら、objRSにRecordsetが入っています。 RecordsetオブジェクトにはRecordCountプロパティがありますから、このプロパティでレコード数が判る場合があります(デフォルトでは判りません) デフォルトのカーソルタイプが、レコード数が判らないタイプになっているので、デフォルトではRecordCountプロパティが-1になります。 ですので、 objADO.Open "Provider=SQLOLEDB;" & _ (以下略) の次の行に connect.CursorLocation = 3 ' クライアントサイドカーソルに変更 を入れて下さい。これで「objRS.RecordCount」に、セレクトしたレコード数が(レコードが無いなら0が、あるならレコード数が)入ります。 なお、Updateした件数は判らないので、事前に同じ条件でSelect文を発行して、上記の方法で対象が何件あるか調べるしかありません。 但し、ただSelectしただけでは「AをAに更新する」など、実質的に更新が入らない場合も更新件数に数えてしまうので、更新済みのレコードは返さないように、事前のSelect文を工夫しないといけません。 例えば「update テーブル set field1 = 123, field2 = 456 where column = パラメータ」をするのであれば「select * from テーブル where column = パラメータ and (field1 <> 123 or field2 <> 456)」のように、更新済みのレコードはSelectしないようにします。
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>Itemの添え字は0からでした。 再度に渡る間違い、申し訳ありませんでした。 普段、Option Base 1(配列の添え字を1から始める)でプログラミングしているので、間違えました。
お礼
ありがとうございます。 すみません、さらに質問なのですが、 Executeメソッドの実行件数を知りたいのですが、 selectの場合は、抽出件数、updateの場合は更新件数を 0件なのか、1件以上なのかを知りたいのですが よろしくお願いいたします。
補足
すみません。 実行件数取得できました。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>「Errors.Items」をオブジェクトが、プロパティまたは方法をサポートしていないみたいなんですが。 失礼しました。 ItemsじゃなくてItemです。「Items」の「s」が余計なので削ってください。 Errorsのsにつられて、勢いでItemにもs付けちゃいました。
お礼
ありがとうございます。 情報を取得することができました。 Itemの添え字は0からでした。 0に必要なエラー情報が入っていました。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
objADO.Errorsコレクションを参照して下さい。 まず Set objADO = CreateObject("ADODB.Connection") の次に objADO.Errors.Clear を実行して、エラーをクリアします。 SQLの実行後、エラーがあるなら objADO.Errors.Count が1以上になります。 if objADO.Errors.Count > 0 then for i = 1 to objADO.Errors.Count msgbox objADO.Errors.Items(i).Description msgbox objADO.Errors.Items(i).Number next i とやれば、エラーコレクションの内容、エラー番号をメッセージボックスで表示できます。 詳しくは http://yasusigi.net/iasdocs/aspdocs/ref/comp/dadobj02.htm http://yasusigi.net/iasdocs/aspdocs/ref/comp/dadobj01_2.htm を参照して下さい。
お礼
ありがとうございます。 教えて頂いた方法で試してみたのですが、 Microsoft VBScript runtime error: Object doesn't support this property or method: 'Errors.Items' が表示されます。 「Errors.Items」をオブジェクトが、プロパティまたは方法をサポート していないみたいなんですが。
お礼
すみません。 お礼遅くなってすみません。 説明、解説ありがとうございます。