Access データベースで、OleDbException (0x80004005) が発生しました。操作は更新可能なクエリを使用しなければなりません
2022-01-24 20:12:18
説明します。現在の Web リクエストの実行中に、処理されない例外が発生しました。エラーの詳細と、コードのどの部分でエラーが発生しているかについては、スタックトレース情報を確認してください。
例外の詳細です。System.Data.OleDb.OleDbException: 指定されたデータ・テーブルから削除できません。
ソースエラーです。
37行目:comm.CommandText = sqlstr;
38行目 //comm.Prepare();
39行目:cout = comm.ExecuteNonQuery()。
40行目
41行目:conn.Close()。
Source file: d:\SOVO acceptance code_BaseApp_CodeJetAccess.cs Line: 39
[OleDbException(0x80004005)。指定されたデータ・テーブルから削除できません]。
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +267
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +192
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +48
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior ビヘイビア、String メソッド) +106
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +108
JetAccess.Execute(OleDbParameter[] parameters, String sqlstr) in d:\SOVO acceptance codeBaseApp_CodeJetAccess.cs:39
NewsData.DeleteNews(Int32 id) in d:\SOVO acceptance codeBaseApp_CodeNewsData.cs:29
_Default.GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) in d:\SOVO acceptance codeBaseSystem Filter.aspx.cs:46
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) +133
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +604
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1155
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
解決方法は以下の通りです。
データファイル*.mdbを右クリックして「プロパティ」ダイアログボックスを開き、「セキュリティ」タブにIUSR_XXX(XXXはマシン名)、つまりインターネットゲストアカウントを追加し、このアカウントの権限を読み取り可能、書き込み可能に設定する必要があります。(だから、問題を解決するのはとても簡単です、私のお尻 :) )
右クリックのプロパティダイアログで「セキュリティ」タブが見つからない場合は、フォルダオプションのビューから「簡易ファイル共有を使用する(デフォルト)」のチェックボックスを削除する必要があります。
原因
エラーの原因は大きく分けていくつかあります。
このエラーは、プログラムがデータベースの更新やそれに類する操作を行おうとしたときに発生します。この原因は
ADOはいくつかの理由により、データベースに書き込むことができません。
1. 最も一般的な理由は、匿名ユーザーアカウント (IUSR_MACHINE) がデータベースファイルへの書き込み権限を持っていないことです。
これを解決するには、Managerでデータベースファイルのプロパティを調整し、匿名ユーザーに正しいパーミッションを与えるようにします。
ACCESSデータベースを使用する場合、ファイルの書き込みだけでなく、ディレクトリの書き込みにもパーミッションを与えてください。
Jetはそのディレクトリに.ldbファイルを作成する必要があります。
2. 2つ目の理由は、データベースが正しいスキーマで開かれていないことです。以下の方法で開く必要があります。
SQL = "UPDATE Products Set UnitPrice = 2;"。
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 ''3 = adModeReadWrite
Conn.Open "myDSN"
Conn.Execute(SQL)を実行します。
Conn.Close(閉じる
なお、デフォルトのModeは0(adModeUnknown)に設定されており、更新が許可されています。
また、ODBCマネージャでこのDSNの読み取り専用オプションがチェックされている可能性もあります。
4. 2つのテーブルのフィールドを同時に更新している場合、このエラーメッセージも表示されます、解決策は、別々に更新することです。
解決策は、2つのテーブルのフィールドをそれぞれ別々に更新することです。
5.下位バージョン(ACCESS 2.0,ACCESS 7.0など)から上位バージョン(ACCESS 2000)に読み込んだテーブルを使う場合。
下位バージョン(例:ACCESS 2.0,ACCESS 7.0)から上位バージョン(ACCESS 2000)へクエリーを実行する際に発生するエラーです。
例外の詳細です。System.Data.OleDb.OleDbException: 指定されたデータ・テーブルから削除できません。
ソースエラーです。
37行目:comm.CommandText = sqlstr;
38行目 //comm.Prepare();
39行目:cout = comm.ExecuteNonQuery()。
40行目
41行目:conn.Close()。
Source file: d:\SOVO acceptance code_BaseApp_CodeJetAccess.cs Line: 39
[OleDbException(0x80004005)。指定されたデータ・テーブルから削除できません]。
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +267
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +192
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +48
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior ビヘイビア、String メソッド) +106
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +108
JetAccess.Execute(OleDbParameter[] parameters, String sqlstr) in d:\SOVO acceptance codeBaseApp_CodeJetAccess.cs:39
NewsData.DeleteNews(Int32 id) in d:\SOVO acceptance codeBaseApp_CodeNewsData.cs:29
_Default.GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) in d:\SOVO acceptance codeBaseSystem Filter.aspx.cs:46
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) +133
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +604
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1155
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
解決方法は以下の通りです。
データファイル*.mdbを右クリックして「プロパティ」ダイアログボックスを開き、「セキュリティ」タブにIUSR_XXX(XXXはマシン名)、つまりインターネットゲストアカウントを追加し、このアカウントの権限を読み取り可能、書き込み可能に設定する必要があります。(だから、問題を解決するのはとても簡単です、私のお尻 :) )
右クリックのプロパティダイアログで「セキュリティ」タブが見つからない場合は、フォルダオプションのビューから「簡易ファイル共有を使用する(デフォルト)」のチェックボックスを削除する必要があります。
原因
エラーの原因は大きく分けていくつかあります。
このエラーは、プログラムがデータベースの更新やそれに類する操作を行おうとしたときに発生します。この原因は
ADOはいくつかの理由により、データベースに書き込むことができません。
1. 最も一般的な理由は、匿名ユーザーアカウント (IUSR_MACHINE) がデータベースファイルへの書き込み権限を持っていないことです。
これを解決するには、Managerでデータベースファイルのプロパティを調整し、匿名ユーザーに正しいパーミッションを与えるようにします。
ACCESSデータベースを使用する場合、ファイルの書き込みだけでなく、ディレクトリの書き込みにもパーミッションを与えてください。
Jetはそのディレクトリに.ldbファイルを作成する必要があります。
2. 2つ目の理由は、データベースが正しいスキーマで開かれていないことです。以下の方法で開く必要があります。
SQL = "UPDATE Products Set UnitPrice = 2;"。
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 ''3 = adModeReadWrite
Conn.Open "myDSN"
Conn.Execute(SQL)を実行します。
Conn.Close(閉じる
なお、デフォルトのModeは0(adModeUnknown)に設定されており、更新が許可されています。
また、ODBCマネージャでこのDSNの読み取り専用オプションがチェックされている可能性もあります。
4. 2つのテーブルのフィールドを同時に更新している場合、このエラーメッセージも表示されます、解決策は、別々に更新することです。
解決策は、2つのテーブルのフィールドをそれぞれ別々に更新することです。
5.下位バージョン(ACCESS 2.0,ACCESS 7.0など)から上位バージョン(ACCESS 2000)に読み込んだテーブルを使う場合。
下位バージョン(例:ACCESS 2.0,ACCESS 7.0)から上位バージョン(ACCESS 2000)へクエリーを実行する際に発生するエラーです。
関連
-
アクセスは、レジストリのキーワードエラー処理方法を開くことができません(80004005エラー)。
-
ACCESSデータベースは、ゼロのメソッドを共有するために自動番号のID値を変更するには
-
ACCESSの自動採番の問題を解決する8つのステップ(SQL SERVER 2000のデータベースをACCESSのデータベースに変換したもの)
-
アクセス文字列処理機能
-
ADODB接続からアクセスは80004005エラー解決法
-
Accessに「検索キーワードに該当するレコードがすべて見つかりません」というエラーが表示される 解決方法
-
IPに基づきユーザーの都市にジャンプする手順
-
データベースから10個のランダムなデータを取得する4つの方法
-
Accessデータベースは、メソッドを解決するための難しさの開始以来
-
バックグラウンドのストアドプロシージャを呼び出すACCESSの実装方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AccessでMicrosoft JET Database Engine (0x80004005) not specifiedエラーを解決する。
-
どのように実装方法を並べ替えるために1からアクセス自動番号を作成する
-
ACCESSデータベースファイルの圧縮と修復方法[グラフィック]。
-
Accessのデータ接続時にC#が常にdbo.mdbが見つからないと報告する問題
-
アクセスコメントフィールドの64K制限
-
中型Accessデータベースの長期使用によるちょっとした経験とデメリット
-
ACCESSラーニングダイアリー
-
中国語Access2000速習講座 - 1.6 "主キー "を定義する
-
レジストリを読み込んで、Officeのバージョンに応じたデータベース接続フィールドを取得します。
-
Accessで指定日以前のレコードを選択する方法は?