3

初めての Access 2010 データベースで作業していて、クエリから返されたレコードセットの編集で問題が発生しました。

「drugs」と「warehouse_stock」の 2 つのテーブルがあります。「薬」には薬の名前があります。他の表には、対応する情報があります。「薬」テーブルにある薬については、薬剤師は、特定の有効期限のある各薬の投入量など、その量とその他の相対値を管理します。薬剤師は、医薬品の同じ情報を「warehouse_stocK」にインポートできますが、有効期限は異なります。

「warehouse_stock」の各行データは、active_substance/strength/strength_type/dosage_form によって特徴付けられます。この 4 つの値は、"drug" の行データで同じでなければなりません。薬剤師は、既存の行データの curr_date、in_quant、out_quant_expiry_date、およびブランド (「warehouse_stock」から) を更新し、「drugs」に存在する新しい量の薬をインポートすることができます。

現在の私のクエリは次のとおりです。

SELECT warehouse.active_subs,
   warehouse.strength,
   warehouse.strength_type,
   warehouse.dosage_form,
   warehouse.curr_date,
   warehouse.in_quant,
   warehouse.out_quant,
   warehouse.expiry_date,
   warehouse.available_stock,
   warehouse.brand,
   warehouse.ID
FROM   drugs
       RIGHT JOIN warehouse
         ON ( drugs.active_substance = warehouse.active_subs )
            AND ( drugs.strength = warehouse.strength )
            AND ( drugs.strength_type = warehouse.strength_type )
            AND ( drugs.dosage_form = warehouse.dosage_form )
WHERE  ( ( ( warehouse.active_subs ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_act_sub & "*" )
AND ( ( warehouse.strength ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_strength & "*" )
AND ( ( warehouse.strength_type ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_strength_type & "*" )
AND ( ( warehouse.dosage_form ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_dosage_form & "*" ) );

結果を更新可能にする方法はありますか?

提案をお寄せいただきありがとうございます!

ジノナス

4

3 に答える 3

0

試す:

<...>
warehouse.ID
FROM  warehouse 
LEFT JOIN Drugs
     ON ( drugs.active_substance = warehouse.active_subs )
        AND ( drugs.strength = warehouse.strength )
        AND ( drugs.strength_type = warehouse.strength_type )
        AND ( drugs.dosage_form = warehouse.dosage_form )
于 2012-05-15T11:24:21.243 に答える
0

このテーブルを更新可能にするには、FromまたはWhere句で使用されなかった結合を(現在まで)削除する必要があります。warehouseただし、値を持つ結果のみをフィルタリングしようとしているとのdrugsことです。これを行うには、相関サブクエリを渡すことができるExists関数を使用する必要があります(内部クエリのアイテムが外部クエリのアイテムと照合されます)。

Select W.active_subs, W.strength, W.strength_type, W.dosage_form
    , W.curr_date, W.in_quant, W.out_quant, W.expiry_date
    , W.available_stock, W.brand, W.ID
From warehouse As W
Where  ( ( ( W.active_subs ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_act_sub & "*" )
AND ( ( W.strength ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_strength & "*" )
AND ( ( W.strength_type ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_strength_type & "*" )
AND ( ( W.dosage_form ) LIKE
"*" &
Forms!Pharmacy.form!pharmacy_warehouse_stock_Subform.form!warehouse_stock_dosage_form & "*" ) )
    And Exists  (
                Select 1
                From drugs As D1
                Where D1.active_substance = W.active_subs
                    And D1.strength = W.strength
                    And D1.strength_type = W.strength_type
                    And D1.dosage_form = W.dosage_form
                )
于 2012-05-16T15:29:19.683 に答える
0

あなたの要件はまったく明確ではなく、タイトルは問題のテキストによる説明や提供されたクエリとは大きく異なります。

active_subs、strength、strength_type、dose_form などのフィールドが同じ値を持つはずの両方のテーブルにある場合、設計に問題がある可能性があります。テーブルの 1 つからそれらを取り除く必要があります。これらのフィールドを 1 つのテーブルにまとめて、ID で結合してみませんか?

編集:無限の議論の後、ここに私が理解したことがあります。大きなコミュニケーションギャップがあるので、OPはこれに満足していないと確信しています:)

SELECT warehouse.ID, drugs.quantity, warehouse.active_subs, warehouse.strength, 
       warehouse.strength_type, warehouse.dosage_form, warehouse.curr_date, 
       warehouse.in_quant, warehouse.out_quant, warehouse.expiry_date, 
       warehouse.available_stock, warehouse.brand --whatever values you want
FROM   warehouse
JOIN   drugs ON drugs.active_substance = warehouse.active_subs AND 
                drugs.strength = warehouse.strength AND 
                drugs.strength_type = warehouse.strength_type AND
                drugs.dosage_form = warehouse.dosage_form
WHERE  (....); --if ever there is one
UPDATE warehouse_stock SET curr_date=@curr_date, in_quant=@in_quant, 
                           out_quant=@out_quant, expiry_date=@expiry_date, 
                           brand=@brand;

OPが更新したい値によっては不明です。更新クエリで適切な where 句を使用します。

于 2012-05-15T20:33:19.157 に答える