ASP は非常に単純であるため、多くの開発者はエラー処理について考えていません。エラー処理により、アプリケーションをより論理的にすることができます。私は ASP で書かれた商用 Web サイトを数多く見てきましたが、そのほとんどはエラー処理を無視していました。 タイプが間違っています。
エラーには主に 3 つのタイプがあります。
1.コンパイルエラー:
この種のエラーは通常、コード内の構文の問題が原因で発生します。コンパイル エラーにより ASP が実行を停止しました。
2.実行エラー:
このエラーは、ASP を実行する準備をしているときに発生します。たとえば、変数に値を代入しようとしたが、その値が変数の許容範囲外である場合です。
3.ロジックエラー:
論理エラーは検出が最も困難です。このエラーは多くの場合、コンピューターでは検出できない構造エラーです。そのためには、コードを上から下まで検査する必要があります。
コンパイル エラーは通常、論理エラーと一緒に発生し、通常は表示される可能性があるため、実行エラーのみを心配します。これにより ASP の実行が終了し、ユーザーにとって非常に不親切なテキストが大量に残ります。 では、実行時エラーにはどのように対処すればよいのでしょうか?
エラーの種類:
ADODB.フィールド (0x800A0BCD)
BOF または EOF が TRUE であるか、現在のレコードが削除されており、必要な操作には現在のレコードが必要です。
理由: SQL を使用してデータベース内のレコードを検索したとき、検索結果は空であり、空のレコードの状況に対処できませんでした。
解決策: 1. 検索結果が空であると思わない場合は、SQL ステートメントが正しいかどうかを検討する必要があります。2. 実際に空である場合は、「if rs.eof then」または「do while」を追加する必要があります。 not rs.eof "" のようなステートメントは、eof 状況を処理するために使用されます。
エラーの種類:
(0×80020009)
事故が発生しました。
理由: SQL を使用してデータベース レコードを検索すると、検索結果が空になり、後続のコードで rs("aa") などのレコードを呼び出しました。
解決策: 上記と同じに rs.eof の判断と処理を加えたか、SQL ステートメントが間違っているためレコードが見つからず、rs("aa") のレコードは後で使用できなくなります。
エラーの種類:
アクティブサーバーページ、ASP 0126 (0×80004005)
インクルードされたファイル「xxx.asp」が見つかりません。
理由: エラー メッセージにあるように、このインクルード ファイルは存在しません。
解決策: このファイルが存在することが確実な場合は、パスが間違って記述されています。たとえば、Web サイトのルート ディレクトリに対する相対パスは inc/xxx.asp である必要があり、inc/xxx.asp は include に記述される必要があります。 、xxx.aspだけではありません。添付ファイル:インクルードの書き方は次のとおりです。
エラーの種類:
ODBC ドライバー用 Microsoft OLE DB プロバイダー (0×80004005)
[Microsoft][ODBC Microsoft Access Driver] 操作では更新可能なクエリを使用する必要があります。
理由: これは XP サーバーでは非常に一般的で、サーバー構成の問題、またはユーザー権限の問題です。
解決策: エラーがこのマシンでのみデバッグされている場合は、Web サイトが存在するフォルダーを右クリックし、[共有とセキュリティ...] をクリックし、[セキュリティ] の [追加...] をクリックして、Everyone と入力して、これを有効にします。ユーザーの権限がすべて、つまり最初の権限を除くすべてにチェックが入っていることを確認後、更新すると使用できるようになります。 (注: [セキュリティ] オプションが見つからない場合は、任意のフォルダーで [ツール] をクリックし、[フォルダー オプション] - [表示] をクリックして、[簡易ファイル共有を使用する] 列のチェックを外します。)
エラーの種類:
Microsoft VBScript コンパイラ エラー (0x800A0401)
ステートメントが終了していません
理由: 構文エラー。
解決策: システムによって要求された行を確認してください。プロンプトがこのページの最後の行である場合は、if ステートメントが「end if」を書き忘れ、select ステートメントが「end select」を書き忘れている可能性が非常に高くなります。つまり、end where end はありません。が必要な場合、サーバーがそれを見つけられないため、ステートメントの最後にエラーを最後の行に表示する必要があります。
エラーの種類:
Microsoft JET データベース エンジン (0x80040E10)
少なくとも 1 つのパラメータに値が指定されていません。
理由: SQL ステートメントを作成するとき、いくつかのパラメーターを呼び出すことがよくありますが、これらのパラメーターのいずれかに値が割り当てられていない可能性があります。
解決策: 各パラメータの値が実際に渡されているかどうかを確認してください。もちろん、一部のパラメータは実際には "" である可能性があります。そのようなパラメータを使用してデータベースにインデックスを付けることはできません。
エラーの種類:
Microsoft JET データベース エンジン (0x80040E37)
Microsoft Jet データベース エンジンは、入力テーブルまたはクエリ 'AA' を見つけることができません。 存在するかどうか、また名前の綴りが正しいかどうかを確認してください。
理由: このテーブルは存在しません。
解決策: 間違ったテーブル名を書いたか、間違ったデータベースに接続した可能性がありますか?もう一度よく確認してください!
エラーの種類:
Microsoft VBScript ランタイム エラー (0x800A000D)
タイプの不一致: /'[文字列: ""]/"
理由: 変数の型は文字列ですが、それを数値または他の型として使用しているためです。
解決策: たとえば、i=i+1 などの数学演算を計算するために数値変数が必要な場合は、変数に cint (変数名) を使用して、2 つの変数間の比較も強制的に数値型に変換する必要があります。同じ型なので、これも変換する必要があります。方法は上記と同じです。
エラーの種類:
Microsoft JET データベース エンジン (0x80040E07)
標準式のデータ型が一致しません。
理由: 一般に、SQL ステートメントを作成するときにエラーが発生します。つまり、数値変数と文字列変数が混同されます。
解決策: SQL 内の "" が追加されている変数から一重引用符を削除するか、元々数値であると考えられていた変数に "" を追加して、その効果を確認するのは簡単です。
エラーの種類:
Microsoft VBScript 実行エラー (0x800A01A8)
オブジェクトが見つかりません:」
理由: rs オブジェクトを定義していない可能性があります。
解決策: オブジェクトを定義できるように、忘れずに set rs=server.CreateObject("adodb.recordset") を記述するか、この記述方法を使用せずに conn.execute("SQL") を使用してください。これははるかに便利であり、オブジェクトの問題を考慮する必要はありません。
エラーの種類:
Microsoft VBScript ランタイム エラー (0x800A005E)
無効な Null の使用: '置換'
理由: Split などを含め、関数の無効な使用は一般的です。理由は比較的単純で、Replace のコンテンツが空であるためです。
解決策: IF を追加して、置換するコンテンツが空かどうかを確認することをお勧めします。
Microsoft VBScript コンパイラ エラー エラー '800a03f6'
ODBC ドライバーは必要なプロパティをサポートしていません。
理由: SQL ステートメントにフィールド名が出現していないことが考えられます。通常、フィールド名または SQL キーワードが間違って記述されています。 SQL でオープンするテーブルが排他的にオープンされている可能性もあります。
解決策: SQL ステートメントに含まれるすべてのフィールド名とすべてのキーワードを確認します。
Microsoft OLE DB Provider for ODBC Drivers エラー '80004005'
マシン 'HDZC-3JQSKBWO02' のユーザー 'Admin' は、データ テーブル 'order_detail' に対して排他的ロックを持っています。
理由:SQLで必要なテーブルがアクセスによりテーブル設計形式で開かれる
解決策: テーブル デザインをオフにする
Microsoft VBScript コンパイラ エラー エラー '800a03f6'
必要な名前または序数に対応するアイテムがコレクション内に見つかりませんでした。
理由: SQL ステートメントにフィールド名がありません。これは通常、フィールド名または SQL キーワードの記述エラーです。
解決策: SQL ステートメントに表示される各フィールド名を確認します。
ADODB.レコードセット エラー '800a0e78'
オブジェクトが閉じている間は操作はできません。
理由: rs.open sql,conn,3,3 ステートメントの前に、rs.close が rs オブジェクトを閉じるために使用されました。
解決策: 以前の rs.close を削除します。
Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14'
[Microsoft][ODBC Microsoft Access Driver] クエリ式 'oid form classtree where oid = 25' に構文エラー (演算子がありません)。
理由: SQL ステートメントに不正に記述された英語のキーワードまたはサブ段落エラーがあります。
解決策: SQL ステートメントを入力し、単語ごとに比較して書き込みエラーを見つけます。
この操作には更新可能なクエリが必要です
回答: ライブラリ ファイルが読み取り専用かどうかを確認してください。
回答 2: ソート (順序付け) レコード セット (rs) では更新操作 (rs.update) が許可されていません。
3219 このコンテンツでは操作は許可されていません
回答 3: データベース フィールドのプロパティが NULL 値の挿入を許可するように設定されているかどうか。
adErrInvalidArgument 3001
0x800A0BB9
アプリケーションは、間違ったタイプのパラメータ、許容範囲外のパラメータ、または他のパラメータと競合するパラメータを使用しています。
adErrNo現在のレコード 3021
0x800A0BCD
BOF または EOF が True であるか、現在のレコードが削除されています。アプリケーションによって要求された操作には、現在のレコードが必要です。
adErr不正オペレーション 3219
0x800A0C93
アプリケーションによって要求された操作は、このコンテキストでは許可されていません
広告エラートランザクション 3246
0x800A0CAE
アプリケーションは、トランザクション中に Connection オブジェクトを明示的に閉じることはできません。
adErr機能が利用できません 3251
0x800A0CB3
プロバイダーは、アプリケーションによって要求された操作をサポートしていません。
adErrアイテムが見つかりません 3265
0x800A0CC1
ADO は、アプリケーションによって要求された名前またはシーケンス参照に対応するオブジェクトをコレクション内で見つけることができません。
3367
0x800A0D27
追加できません。オブジェクトはすでにコレクション内にあります。
adErrObjectNotSet 3420 0x800A0D5C アプリケーションによって参照されるオブジェクトは有効なオブジェクトを指していません。
adErrDataConversion 3421
0x800A0D5D
アプリケーションは、現在の操作に適さない値の型を使用しました。
adErrObjectClosed 3704
0x800A0E78
オブジェクトが閉じられている場合、アプリケーションによって要求された操作は許可されません。
adErrオブジェクトオープン 3705
0x800A0E79
オブジェクトが開いている場合、アプリケーションによって要求された操作は許可されません。
adErrプロバイダーが見つかりません 3706
0x800A0E7A
ADO は指定されたプロバイダーを見つけることができません。
adErrBoundToCommand 3707
0x800A0E7B
アプリケーションは、Command オブジェクトを使用して Recordset オブジェクトの ActiveConnection プロパティをソース データに変更することはできません。
adErrInvalidParamInfo 3708
0x800A0E7C
アプリケーションが Parameter オブジェクトを誤って定義しています。
adErr無効な接続 3709
0x800A0E7D
アプリケーションは、閉じられたまたは無効な Connection オブジェクトを参照することによって、オブジェクトに対する操作を要求します。
ADODB.Field エラー '80020009' BOF または EOF が 'true' であるか、現在のレコードが削除されており、必要な操作には現在のレコードが必要です。
解決策は次のとおりです。 このエラーは、SELECT および DELETE のレコードが存在しない、またはライブラリにレコードが存在しないことが原因で発生するため、SQL ステートメントと SELECT および DELETE の条件が正しいかどうかを確認してください。レコードを SELECT するか、DELETE の前に On を使用して次を再開…….On Error Goto 0 を使用して処理することも最適です。ライブラリにレコードが存在しない場合は、If objRecordSet.Eof And objRecordSet.Bof then という判定を追加するだけです。 RecordSet を開くと、デフォルトでポインタが末尾を指すので、If objRecordSet を使用するだけで済みます。 Eof それから判断します。
ActiveServerPages、ASP0126(0×80004005) –> インクルード ファイルが見つかりません
MicrosoftOLEDBProviderforODBCDrivers(0x80040E21) –>SQL ステートメント エラー (データ型の不一致またはテーブル名 (フィールド名) エラー、またはテーブルが編集状態であるか、conn によって開かれたデータベースにテーブルが存在しません)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E14) –>SQL ステートメント エラー (フィールド名エラー、またはデータ型の不一致)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E07) –> SQL ステートメント エラー (挿入または更新されるフィールドの型が変数のデータ型と一致しません)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E57) –> SQL ステートメント エラー (挿入または更新されるデータのオーバーフロー)
MicrosoftOLEDBProviderforODBCDrivers(0x80040E10) –>SQL ステートメント エラー (更新フィールド名または更新するデータ型が間違っています)
MicrosoftOLEDBProviderforODBCDrivers(0×80004005) –> SQL ステートメント エラー (挿入または更新されるフィールドの値を null にすることはできません)
MicrosoftOLEDBProviderforODBCDrivers(0×80004005) –>データベースを開くときにエラーが発生しました。指定されたディレクトリにデータベースが見つかりません
MicrosoftOLEDBProviderforODBCDrivers(0x80040E37) –>テーブルが見つかりません
MicrosoftVBscript ランタイム エラー (0x800A000D) –> rs 変数の参照エラー (rs オブジェクトが閉じられているか、未定義です)
MicrosoftVBscript ランタイム エラー (0x800A01C2) –>vbscript スクリプト エラー (vbscript ステートメント エラー)
MicrosoftVBscript ランタイム エラー (0x800A0006) –>vbscript スクリプト エラー (オーバーフロー エラー)
MicrosoftVBscript コンパイラ エラー (0x800A040E) –> ループがありません
MicrosoftVBscript コンパイラ エラー (0x800A03EA) –> if または endif が欠落しています
MicrosoftVBscript コンパイラ エラー (0x800A03EE) –> ステートメントが終了していません (「)」がありません)
MicrosoftVBscript コンパイラ エラー (0x800A03F6) –>if ステートメント エラー (endif の欠落)
MicrosoftVBscript ランタイム エラー (0x800A005B) –> セットがありません
MicrosoftVBscript ランタイム エラー (0x800A0005) –> 変数が定義されていません
MicrosoftVBscript コンパイラ エラー (0x800A03F9) –>if ステートメントが欠落している場合
MicrosoftVBscript コンパイラ エラー (0x800A0411) –> dim ステートメント定義エラー
ADODB.Recordset(0x800A0BB9) –>SQL ステートメント エラー (SQL ステートメントまたは conn ステートメントが定義されていないか、rs 属性に値を割り当てるときにエラーが発生します)
ADODB.Recordset(0x800A0CC1) –>rs オブジェクト エラー (rs オブジェクト自体が存在しないか、存在しないフィールド名を誤って参照しています)
ADODB.Recordset(0x800A0BCD) –>rs オブジェクト エラー (レコード セットにレコードがありませんが、レコード セットは操作されています)
ADODB.Recordset(0x800A0E78) –>rs オブジェクト エラー (レコード セットが存在しない、rs.open ステートメントが欠落しています)
ADODB.Recordset(0x800A0CC1) –> rs オブジェクト エラー (存在しないフィールド名を参照しています)
ADODB.Recordset(0x800A0E7D) –> conn 定義エラー
ADODB.Recordset(0x800A0CB3) –>データベースは読み取り専用モードで開かれており、データは更新できません。