|
>サブフォームには「確認」と言う「Yes/No型」のフィールドと「名前」「住所」「印刷部数」と言うテキストボックス型のフィールドがあります。
「フォームにフィールドがある」という言い回しはよく見かけますが、
不正確ですね。
フィールドという言葉を使えるのは、テーブルとクエリだけです。
フォームに配置できるのはコントロール
(チェックボックスやテキストボックスなど)だけです。
フォームにフィールドは配置できません。
上記は、
サブフォームには、フィールド名が「確認」、
データ型がYes/No型であるフィールドをコントロールソースとする
××という名前のチェックボックスがある
という言い方をすべきです。
ウィザードを使ってフォームを作ると、
コントロールの名前とフィールドの名前が同じになるため、
このような混同が生じるのでしょうが、
フィールドとコントロールを混同していると、
集計関数(Sum関数など)や定義域集計関数(DCount関数など)の引数指定を
間違いかねません。
>出来ればマクロでよろしくお願いします
私は、マクロはほとんど使ったことがないので、
マクロでの指定の仕方はよくわかりません。
ただ、考え方としては、
まず、「チェックした数の合計」を求め、
次いで、「値の代入」アクションによって、
その合計を「印刷部数」というテキストボックスに代入する
ことになりますね。
チェックした数の合計の求め方ですが、DCount関数を使います。
DCount関数では、
DCount("主キーのフィールド名"
,"テーブル名"
,"「確認」のフィールド名=True")
と指定します。
フィールド名とコントロール名(チェックボックス名やテキストボックス名)
とを混同しないようにしてください。
ここでは問題となりませんが、
第3引数における値の指定の仕方にはクセがあります。
第3引数で使うフィールドが
数値型の場合 フィールド名=123
テキスト型の場合 フィールド名="あいう"
日付型の場合 フィールド名=#2014/05/04#
のように指定します。
次の問題は、フォームで入力した内容がいつテーブルに反映されるか
ということです。
フォームに入力すれば、それが直ちにテーブルに反映されるわけでは
ありません。
フォームにおいて、フォーカスをカレントレコードの外に出すか
(他のレコードに移動するとか、
非連結のコントロールにフォーカスを移すとか)、
又は「レコードの保存」というコマンドを実行するかしないと、
フォームの入力内容はテーブルに反映されません。
DCount関数は、テーブルに対して実行されますので、
フォームの入力内容がテーブルに反映されていないと、
予想と異なった値が返ってしまいます。
次に、値の代入をどのタイミングで行うかということも問題となりますね。
つまり、どのイベント時に値を代入を行うかということです。
ま、チェックボックスの更新後処理だとは思いますが。
ただ、よくわからないのは、
印刷部数をレコードごとに持たせるという点ですね。
例えば次のようになったりしませんか。
ID 名前 住所 確認 印刷部数
1 太郎 東京都 レ 1
2 次郎 神奈川県 1
3 三郎 千葉県 レ 2
三郎について、印刷部数が2であるということを持たせても何の意味もないし、
却って誤解を招くことになりそうな気がします。
印刷部数は、メインフォームに非連結のテキストボックスを配置して
そこに持たせた方がいいのではないでしょうか。
|
|