- ベストアンサー
Access2000 フォームで計算したものをテーブルに反映するには?
上司に頼まれ、Access2000で従業員データを作成しました。 そこで、フォームにおいて年齢を計算するために 「生年月日」を入力する欄と、「年齢」を表示する欄を作成して コントロールソースにも入れて、うまく表示できたのですが、 その年齢の数字が、テーブルやクエリで見ると表示されていません。 他の何かのデータを見た時にはできていたはず。。。 表示する為の手順が足りないのでしょうが、初心者ゆえにまったくしてわかりません、教えて下さい。 どうかよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
三度、GreatDragon です。 ANo.1 の回答です。 テーブルの一括更新であれば、更新クエリが便利と思います。 作成手順は 1.更新したいテーブルを基に選択クエリを作成します。 この時、デザイングリッドには年齢だけを指定します。 2.クエリメニューから「更新」を選択し、レコードの更新セルに 年齢の計算式を入力して完成です。 (年齢計算式の例) DateDiff("yyyy",[生年月日],Now())+Int(Format(Now(),"mmdd")<Format([生年月日],"mmdd")) Now() の替わりに、今年または来年の4月1日を指定してください。
その他の回答 (3)
- arare2005
- ベストアンサー率31% (63/199)
(補足です) 年齢(月なし)だけであれば GreatDragonさんの方法がシンプルで良いかと思います。 フォーム等に常に表示したいのであれば「クエリ」を使います。 (1)「クエリ」→「新規作成」→「デザインビュー」 (2)表示するテーブルを「追加」→「閉じる」 (3)テーブルの1番上の「*」をダブルクリック (4)その隣のフィールドにGreatDragonさんの計算式をそのままコピーして貼り付け 年齢式: DateDiff("yyyy",[生年月日],Now())+Int(Format(Now(),"mmdd")<Format([生年月日],"mmdd")) ※年齢式: は表示する項目名になります(重複しなければ何でも良いです) (5)表示のチェックBOXにチェックを入れます 以降、フォームに使用するテーブルは、このクエリを使用します。 これで、リアルタイムに年齢が表示される様になります(^^) 何歳何ヶ月まで求める事も出来ますが、この時はモジュールで計算式を入れた方が使い易いと思います。 関数だけでくっつけすぎると、見づらくなりますから(^^; 又、その様な事をされたいのであれば、又、ご質問して頂ければ...と思います。
お礼
ご回答ありがとうございました。 おっしゃるとおり、クエリで設定をしました。 ヒントを頂きありがとうございました!
- GreatDragon
- ベストアンサー率46% (186/402)
ANo.1 / GreatDragon です。 ANo.1 ではあのように記述しましたが、今後の参考になるよう回答します。 1.ツールのオプションから「名前の自動修正」のチェックを外しておきます。 2.フォームの演算フィールドの年齢のテキストボックス名を「Txt計算年齢」とします。 3.テーブルの年齢をフォームにテキストボックスコントロールで追加してください。 「可視」プロパティを「いいえ」にしテキストボックス名を「Txt年齢」とします。 4.フォームの更新前処理のビルドをクリックし下記のコードを貼り付けます。 Private Sub Form_BeforeUpdate(Cancel As Integer) [Txt年齢] = [Txt計算年齢] '←この行だけ貼り付けして下さい。 End Sub 以上でレコードの保存時に年齢の値も保存されるはずです。 よろしかったらお試しください。
- GreatDragon
- ベストアンサー率46% (186/402)
回答ではありませんが・・・ 「年齢」のようなデータは通常はテーブルに保存しません。 もし保存したら今度はその年齢を何度も更新する必要が出てくるはずです。 生年月日だけの保存でよろしいかと思います。 年齢を知りたくなったら、テーブルではなく年齢の計算式が設定された演算フィールドがある フォームで確認するのが良いでしょう。
お礼
ご回答ありがとうございます。 年齢は自動で更新はされていかないのですね。 そこで上司に確認したところ,4月1日現在でもいいんだけど,といわれました。 これならば年に一度の更新でよいですよね? もし方法がございましたら教えて下さい。
お礼
できました! 年齢: DateDiff("yyyy",[生年月日],Now())+Int(Format(2005/4/1,"mmdd")<Format([生年月日],"mmdd")) でしたね(^-^; 結局、クエリで式を入力して表示させました。 フォームにも連動して表示されています。 ありがとうございました。
補足
今年の4月1日を指定するとは、以下の文でしょうか? DateDiff("yyyy",[生年月日],2005/4/1)+Int(Format(2005/4/1,"mmdd")<Format([生年月日],"mmdd")) 年齢がマイナスになってしまいます。。。(>_<) 初心者ですみません。