2

私はこのクエリを書きました:

UPDATE tbl_stock1 SET 
tbl_stock1.weight1 = (
    select (b.weight1 - c.weight_in_gram) as temp 
    from
        tbl_stock1 as b,
        tbl_sales_item as c 
    where
        b.item_submodel_id = c.item_submodel_id 
        and b.item_submodel_id = tbl_stock1.item_submodel_id 
        and b.status <> 'D' 
        and c.status <> 'D'
    ), 
tbl_stock1.qty1 = (
    select (b.qty1 - c.qty) as temp1 
    from
        tbl_stock1 as b,
        tbl_sales_item as c 
    where 
        b.item_submodel_id = c.item_submodel_id 
        and b.item_submodel_id = tbl_stock1.item_submodel_id 
        and b.status <> 'D' 
        and c.status <> 'D'
    )
WHERE
    tbl_stock1.item_submodel_id = 'ISUBM/1' 
    and tbl_stock1.status <> 'D';

次のエラー メッセージが表示されました。

Operation must use an updatable query. (Error 3073) Microsoft Access

しかし、SQL Server で同じクエリを実行すると、実行されます。

ありがとう、ディネシュ

4

6 に答える 6

2

JET DB エンジンは、サブクエリを含むすべてのクエリを更新不可として扱うと確信しています。これがエラーの原因である可能性が最も高いため、ロジックを作り直し、サブクエリを回避する必要があります。

テストとして、2 つのサブクエリのそれぞれで実行されている計算 (減算) を削除することもできます。この計算は、アップデートでもうまく機能しない可能性があります。

于 2009-08-05T06:04:46.810 に答える
0

andから(それぞれ)派生した値でweight1andを更新しています。これが、MS-Access が更新を停止している理由です。バックグラウンドで何らかの最適化も行っている可能性があります。qty1weight1qty1

これを回避する方法は、計算を一時テーブルにダンプし、一時テーブルから最初のテーブルを更新することです。

于 2009-08-05T14:43:24.270 に答える
-1

クエリのプロパティで、レコードセットの種類をダイナセット (不整合な更新)に変更してみてください。

于 2009-08-05T07:39:44.153 に答える