web-dev-qa-db-ja.com

MS Accessの「操作は更新可能なクエリを使用する必要があります」エラー

SQLを実行しようとすると、「操作では更新可能なクエリを使用する必要があります」というエラーメッセージが表示されます。私の理解では、これは、MS Accessの更新/削除クエリで結合が使用されている場合に発生します。ただし、データベースでほぼ同じ別のクエリが正常に機能するため、少し混乱しています。

これは私の面倒なクエリです:

UPDATE [GS] INNER JOIN [Views] ON 
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
    SET 
        [GS].APPID = [Views].APPID, 
        [GS].[Name] = [Views].[Name], 
        [GS].Hostname = [Views].Hostname, 
        [GS].[Date] = [Views].[Date], 
        [GS].[Unit] = [Views].[Unit], 
        [GS].[Owner] = [Views].[Owner];

前にも言ったように、これに似た別のクエリがあり、完全に実行されるため、混乱しています。これはそのクエリです:

UPDATE [Views] INNER JOIN [GS] ON 
[Views].APPID = [GS].APPID 
SET 
    [GS].APPID = [Views].APPID, 
    [GS].[Name] = [Views].[Name], 
    [GS].[Criticial?] = [Views].[Criticial?], 
    [GS].[Unit] = [Views].[Unit], 
    [GS].[Owner] = [Views].[Owner];

最初のクエリの何が問題になっていますか?最初のクエリが機能しないのに、なぜ2番目のクエリが機能するのですか?

23
Andrew Martin

この答えが普遍的に真実かどうかはわかりませんが、クエリを少し変更することでこれを解決しました。

選択クエリをテーブルに結合して処理するのではなく、選択クエリを変更して一時テーブルを作成しました。次に、その一時テーブルを実際のテーブルに使用しましたが、すべて完全に機能しました。

19
Andrew Martin

コードにエラーはありませんが、次の理由によりエラーがスローされます。

 - Please check whether you have given Read-write permission to MS-Access database file.
 - The Database file where it is stored (say in Folder1) is read-only..? 

データベース(MS-Accessファイル)を読み取り専用フォルダーに保存し、アプリケーションの実行中に接続が強制的に完全に開かれないと仮定します。したがって、C:\Program filesすべてのほとんどすべてのcドライブファイルが設定されています読み取り専用この許可を変更すると、この問題が解決します。

20

リンクテーブルを更新しようとしたときに同じエラーが発生しました。

問題は、リンクテーブルにプライマリキーがなかったことです。

データベース側に主キー制約を追加し、このテーブルをアクセスに再リンクすると問題が解決しました。

それが誰かを助けることを願っています。

13
Almazini

私はまったく同じ問題を抱えていたので、この解決策をどのように気に入ったか覚えていませんが、DISTINCTROWを追加するだけで問題は解決しました。

コードでは次のようになります。

UPDATE DISTINCTROW [GS] INNER JOIN [Views] ON <- the only change is here
    ([Views].Hostname = [GS].Hostname) 
    AND ([GS].APPID = [Views].APPID) 
 ...

なぜこれが機能するのかはわかりませんが、私にとっては、まさに必要なことをしました。

10
EBH

アプリケーションディレクトリにアクセス許可を設定すると、この問題を解決できます

この許可を設定するには、App_Dataフォルダー(またはファイルを入れた他のフォルダー)を右クリックして、[プロパティ]を選択します。 [セキュリティ]タブを探します。表示されない場合は、[マイコンピュータ]に移動し、[ツール]をクリックして[フォルダオプション...]を選択し、[表示]タブをクリックする必要があります。一番下までスクロールし、「簡易ファイル共有を使用する(推奨)」のチェックを外します。 [セキュリティ]タブに戻り、関連するアカウントを[グループ名]または[ユーザー名]ボックスに追加する必要があります。 [追加...]をクリックし、[詳細設定]、[今すぐ検索]の順にクリックします。適切なアカウントがリストされているはずです。それをダブルクリックしてグループまたはユーザー名ボックスに追加し、権限の変更オプションをチェックします。それでおしまい。できました。

3
E R

レコードを更新するには、ディスク上の.mdbファイルに変更を書き込む必要があります。 Web /共有アプリケーションがディスクに書き込めない場合、既存のレコードを更新したり、新しいレコードを追加したりすることはできません。そのため、データベースフォルダーで読み取り/書き込みアクセスを有効にするか、アプリケーションが書き込み権限を持つ他のフォルダーにデータベースを移動します....詳細については、以下を確認してください。

http://www.beansoftware.com/ASP.NET-FAQ/Operation-Must-Use-An-Updateable-Query.aspx

2
Mujahed

UNCパスを使用してデータベースにアクセスしているときに、この例外がスローされることがありました。コンピューター名をIPアドレスに置き換えると、問題は突然解決しました。

1
MartinVotruba

私は一時テーブルを使用し、最終的にこれを機能させました。一時テーブルを作成すると、次のロジックが使用されます。

UPDATE your_table, temp
SET your_table.value = temp.value
WHERE your_table.id = temp.id
1
kjmerf

この同じエラーが発生しましたが、主キーを使用しても違いはありませんでした。問題は、テーブルがリンクされたExcelテーブルであるということでした。これを変更する設定があることは知っていますが、IT部門がこれをロックしているため、変更できません。代わりに、リンクテーブルからmakeテーブルを作成し、代わりにUpdate Queryでそれを使用して機能しました。同じExcelリンクテーブルにもリンクされているクエリ内のクエリは、同じエラーを引き起こすため、Excelリンクテーブルに直接リンクされないように、これらも変更する必要があります。 HTH

0
Derek

これは暗闇の中でのショットですが、ANDの2つのオペランドを括弧で囲んでみてください

オン((A = B)And(C = D))

0
garaber