tab1:
ID_fld1_fld2_fld3
01____1_AAAA___10
02____1_BBBB___10
03____2_AAAA___20
04____2_BBBB___20
[クエリ1]
___1___20
___2___40
SELECT fld1, Sum(fld3) AS fld3の合計
FROM tab1
GROUP BY fld1;
さて、一つのフォームに[tab1入力フォーム]と[クエリ1]を配置しても入力結果は合計に反映されません。
そこで、下記のように Requery を実行。
が、それは瞬時には反映されないので実際問題としては使用不能かと思います。
Private Sub fld3_AfterUpdate()
Me.Parent.Form("クエリ1").Requery
End Sub
そこで・・・。
Private Sub fld3_AfterUpdate()
Me.Parent.Form("クエリ1").SetFocus
SendKeys "+({F9})", False
End Sub
これであれば合計が瞬時に更新されますがフォーカスが移動してしまします。
「連続入力が不可能になるのでは・・・」という理由です。
tab2:
fld1_fld3の合計
___1__________0
___2__________0
ところで、仮に合計を記録するテーブルを用意するとします。
Private Sub Form_AfterUpdate()
CnnExecute "UPDATE tab2 Set fld3の合計=" & DBSum("fld3", "tab1", "fld1=" & Me.fld1) & " WHERE fld1=" & Me.fld1
End Sub
この場合、合計参照フォームでは[クエリ1]でなく[tab2]を参照させます。
これですと、[tab1入力フォーム]のレコードが更新された瞬間に合計表示フォームも更新されます。
もちろん、リクエリなんてしていませんのでフォーカスの移動もありません。
必要であれば、CnnExecute関数は補足します。
お礼
ありがとうございます。 ""が抜けていました。
補足
実行エラー オブジェクトが必要です。と表示されます。 名前は、サブフォーム右クリック→プロパティ→その他→名前 で良いですよね?