34

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 番目のクエリが機能するのはなぜですか?

4

12 に答える 12

22

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

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

于 2013-11-05T14:08:03.417 に答える
4

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

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

于 2016-06-19T10:32:04.300 に答える
2

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

UPDATE your_table, temp
SET your_table.value = temp.value
WHERE your_table.id = temp.id
于 2017-01-04T16:46:05.330 に答える
-4
UPDATE [GS] INNER JOIN [Views] ON 
([Views].Hostname = [GS].Hostname) 
AND ([GS].APPID = [Views].APPID) <------------ This is the difference 
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];
于 2015-03-31T04:30:15.367 に答える