- ベストアンサー
スクリプト エンジンの例外が発生しました
仕事でASPを使用してWeb画面を開発してます。 環境は、Windows2000+IIS5.0+Oracle8i です。 先日、他の処理と同じようにデータベースを検索し、 条件に一致したデータを抽出したところ、 「ASP 0240 スクリプト エンジンの例外が発生しました 」という エラーが生じてしまいました。 やっている処理内容は、以下の通りです。 1:objCon.Open 2: 3:strSQL = "select xxx,yyy from ABC" 4: 5:objRS.Open strSQL, objCon, 3, 3 6:If objRS.EOF = True Then 7: a = objRS("xxx").value 8: b = objRS("yyy").value 9:end if 上の7行目を実行すると、エラーが発生してしまいます。 もちろん、ここで実行されるSQL文は正しい構文です。 マイクロソフトでこの「スクリプト エンジンの例外が発生しました 」の エラーの生じた原因と対処方法を調べようとしたのですが、よくわかりませんでした。 このエラーはどのような原因で起こり、どのように対処すればよろしいのでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 「ASP 0240 スクリプト エンジンの例外が発生しました」というエラーはあまり見ないですね。 ネットで検索しても、使える情報が見つかりませんし。 よほど深刻なエラーか、よほど初歩的なエラーの可能性があります^^; まず、サーバには最新のパッチが当てられていますよね? あと、Oracleには何接続なのでしょうか。 ODBCですか?oo4oですか?ADOですか? > 先日、他の処理と同じようにデータベースを検索し、 > 条件に一致したデータを抽出したところ、 他の処理では、うまく動作しているんですよね? SQLを実行して、検索結果を取得できているんですよね? 正常に動作する場合と、正常に動作しない場合の違いはなんでしょうか。 例に記されているSQLと違って、難しいSQLを実行している、ということはありますか? または、同一ソース内でobjRSをCloseしないで再びOpenしている、ということはありますか?
その他の回答 (4)
- SiroutoPGM
- ベストアンサー率30% (3/10)
OLE DBプロバイダーはOracleのものですか?マイクロソフトのものですか? この2つのフィールドの中身が全てスペースということはありませんか? どちらがどちらだったか忘れましたが、どちらかのプロバイダはNet上に送信されるデータ量を減らすために、文字項目にはTrimがかけられ、後ろについているスペースが削除される仕様になっているはず。なので項目の中身が全てスペースだとNULLになってしまいます。 NOT NULLに設定されている項目にNULLがセットされて返ってきたみたいな感じでプロバイダー内でエラーになります。 1つラッピングを増やして、DSNを作成しODBC OLE DBプロバイダーを使用してみると解決するかも。
補足
問題の生じる環境では、マイクロソフトの方を使用しています。 >1つラッピングを増やして、DSNを作成しODBC OLE DBプロバイダーを使用してみると解決するかも。 情報ありがとうございます。 早速やってみたいと思います。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
値がNULLなんてことは?
補足
アドバイスありがとうございます。 NULLというのはDBから抽出される値の事でしょうか? たしかにNULLという事もあり得ると思いますが、 試しにNULL以外のデータを入れてもダメでした。 どうぞ、よろしくお願いします。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
エラーは必ず発生するんですか? 7行目と8行目を入れ替えてもxxxで発生しますか? xxxの型は?
補足
はい、ここの検索を処理させることに発生します。 抽出する順番も変えてみましたし、テーブルの他の列(フィールド)に 変えてみてもエラーが生じてしまいました。 データ型は7行目がVARCHAR2(10)で、8行目がVARCHAR2(3)です。 よろしくお願い致します。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>6:If objRS.EOF = True Then >7: a = objRS("xxx").value レコードセットに結果がなかったらxxxの値を取得しています。 そりゃ結果ないですよね。 If objRS.EOF = False Then では?
補足
すみません。提示したサンプルが間違ってました。 1:objCon.Open 2: 3:strSQL = "select xxx,yyy from ABC" 4: 5:objRS.Open strSQL, objCon, 3, 3 6:If objRS.EOF = false Then 7: a = objRS("xxx").value 8: b = objRS("yyy").value 9:end if 正確には上の通りです。 よろしくお願いします。
補足
返事が遅くなってすみません。 オラクルへの接続は、MicrosoftODBCDriverforOracleを使用しています。 >正常に動作する場合と、正常に動作しない場合の違いはなんでしょうか。 参照している列が違うのみで、SQL文は至って普通のselect文を発行しています。 なんかお気づきの点ありましたら、ご指摘下さい。 宜しくお願い致します。