2011-07-17 42 views
2

まず、私の設定について少しです。計算されたコントロールは自動的に再計算されません

私は3つのテーブルの原始データベースを有する:様々な場所を示し

A.表:アイテムを記述する[location_code]、[LOCATION_NAME]

B.表:[ITEM_CODE]を一緒に、[ITEM_NAME]、[ITEM_PRICE]

とROOを結びつける最後に表^ H^H^H全体データベース

C.テーブルには、[location_code]、[item_code]、[item_quantity]の各項目にどの項目が格納されているかが示されます。このテーブルは、[location_code]が同じ複数のエントリを持つことができます。異なる項目は同じ場所に格納できるためです。基本的には、場所からアイテムへの1対多の関係の教科書実装で、各場所アイテムリンクに追加の属性(数量)が添付されています。

ここでは、特定の場所に格納されているすべてのアイテムを一覧表示するフォームを作成するだけです。これは、Accessの「サブフォーム」機能の基本的な使用例です。メインフォームは異なる場所をナビゲートし、サブフォームはアイテムをリストします。

私は、サブフォームのレコードソースとして

SELECT C.location_code, B.item_name, B.item_code, B.item_price, C.item_quantity 
FROM B INNER JOIN C ON B.item_code=C.item_code 

を使用しています。メインフォームは[location_code]でサブフォームにリンクされています。サブフォームはリストレイアウト(テーブルレイアウトではない)でセットアップされます。つまり、各データベースフィールドには独自のコントロールエレメントが与えられます。

これまでのところすべてが完全に機能します。私はメインフォームの場所を選択し、サブフォームは私に現在の場所の編集可能な[item_name] - [item_price] - [item_quantity]トリプレットのリストを与えます。

次のステップとして、上記のトリプレットのそれぞれに計算されたコントロールを追加します。アイテムの種類ごとの合計金額(各行には単に[item_price] * [item_quantity])が表示されます。簡単に、計算されたコントロールをサブフォームの「繰り返し可能」領域に追加し、値の式として

= [item_price] * [item_quantity] 

と指定します。ここでも、すべてが完璧に機能します。今度は上記のトリプレットの代わりに、私のリストは1行に4つのエントリーを持っています:[item_name] - [item_price] - [item_quantity] - [total_item_price]。そして重要なのは、[item_price]や[item_quantity]を編集すると、編集を終えたときに[total_item_price]が自動的に再評価されます。

最後に、現在の場所に格納されているすべてのアイテムの合計金額を表示する別の計算コントロールを追加します(「総計」としましょう)。また、(「脚注」領域にこの時間)、サブフォームにコントロールする場所とこの作品、その値として今

= SUM([item_price] * [item_quantity]) 

を次の式を指定します。合計値は、メインフォームの場所を変更するたびに正しく計算されます。また、現在の場所でアイテムの[item_price]を変更すると、総計も自動的に更新されます。ただし、[item_quantity]を変更すると、総計は更新されません(???)。 F9を押すと更新されます。現在の場所を前後に変更すると、その場所が更新されます。しかし、残念ながら、[item_quantity]の単なる変更は自動更新を起動しません。

誰でも知っていますか、ここで間違っている可能性がありますか? [item_price]の変更によって総額の自動更新がトリガーされるのはなぜですか?[item_quantity]の変更は行われません。直観的には、これらのフィールドは同じステータスを持つように見えます(前者は表Bから、後者は表Cからのものです)。なぜ行動が違うのですか?自動的に更新するにはどうすればよいですか?

+0

あなたはサブフォーム上のすべての3つのイベントで計算を行う必要があります。1.更新 2.後に挿入し 3.確認後、削除した後しかし、あなたがコピーした場合、バグがあると、複数のレコードを貼り付けますサブフォームに挿入します。私はまだ解決策を探しています。ありがとう、リチャード –

答えて

0

レコードをタブで移動して次のレコードに進むと、まだ更新されません。私は価格がタブオーダーの最後のフィールドだと思っています。それを変更すると、次のレコードに移動し、変更がコミットされます。あなたが数量を編集するときに正しいとすれば、あなたのタブは現在のレコードに残っている価格フィールドに進みます。そのため、変更はまだテーブルにコミットされていません。さらに進むと、処理が完了するはずです。

+0

はい、私はそれを認識しています。私はレコードを完全に編集します。つまり、次のレコードにジャンプします。しかし、残念ながら更新は行われません。 – AnT

+0

@ HansUpのようなものが(計算のテキストボックスを再クエリーするという)提案が必要だと思っていますが、なぜそれでも疑問に思うでしょう。あなたのselectステートメントを見ると、BではなくAまたはC.location_codeとして開始する必要があるようですが、それはタイプミスであるか、または私たちにすべての正しい情報を与えていないと判断する必要があります。 –

+0

はい、あなたは正しいです。それは 'C.location_code'でなければなりません。私は質問の質問を修正しました。 – AnT

5

サブフォームの更新後イベントで、明示的に総価格コントロールを再計算します。

Me.txtTotalPrice.Requery 
関連する問題