- 締切済み
アクセスで関数は?
アクセスのデータAに100と入力し、 データBに30と入力した時に、 データCにデータA-データBが自動的に入るように 関数みたいなものはできないでしょうか? 単純なことなのですが、宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- snoopy64
- ベストアンサー率42% (337/793)
#3です。補足を見ました。 >フォームAとBに更新後処理を入れましたがCが更新されません。。。 これは???AとBとCは別々のフォームのような言い方ですね。。。そうだとすると、レコードの同期やらフォーム間のフォーカスの受け渡しやら、いろいろ複雑になるはずで、そういう処理を希望する方のご質問としては初歩過ぎますので(失礼)、おそらく違うのではないかと。。。というわけで一応、「テーブル1にA、B、Cというフィールドがある。テーブル1へのデータ入力用のフォーム1にはテキストボックスA、B、Cがある。それぞれのコントロースソースは同名の各フィールドとする。」 ということで話を進めます。これがまったく的外れでしたら以下は無視してください。 テキストボックスAの更新後処理のイベントプロシージャに Private Sub A_AfterUpdate() Me.C = Me.A - Me.B End Sub テキストボックスBも同様に Private Sub B_AfterUpdate() Me.C = Me.A - Me.B End Sub をコードを書き、フォームを実行すると、AやBに入力するとCが自動的に計算されます。 がんばってください(^o^)丿
- Gin_F
- ベストアンサー率63% (286/453)
そもそも、リレーショナルデータベースの基本的な考え方に、計算で 求めることができる項目については、データ(テーブル)として もたないというものがあります。 そうでないと、例えば今回の場合、テーブルをデータシートビューで 開き、データA を直接修正すると、データC の内容は誤ったものに なってしまいます。 クエリで計算をさせれば、上記のようなことはないので、そうすべきだと 思います。
- snoopy64
- ベストアンサー率42% (337/793)
#1 です。#2の方への補足を見ました。 #2さんがおっしゃっているのは、入力用フォームを作って、そのフォームで入力する場合の事です(だと思います)。 フォームにABCそれぞれのテキストボックスを用意し、AとBの更新後処理イベントにC=A-Bの計算をするコードを書く、という事です。 一方、僕が回答したのは、テーブルを開いてデータシートで入力するイメージです。 この違いはお分かりになりますか?(失礼!) その辺の補足をいただければまた回答します。 頑張ってくださいヽ(^。^)ノ
- mshr1962
- ベストアンサー率39% (7417/18945)
データA,B,Cがフィールド(項目)なら AとBのイベントの更新後処理で [C]=[A]-[B] にすればデータCへの値セットも可能です。 データCが表示だけの場合は#1の方も言われる通り、 テキストボックスのコントロールソースに =[A]-[B] としてください。 データA,B,Cが異なるレコードの場合は不可能です。
補足
回答ありがとうございます。 手元の書籍など色々調べましたが、 「イベントの更新後処理」がわかりません。 どこで設定するのでしょうか? 宜しくお願いします。。。
- snoopy64
- ベストアンサー率42% (337/793)
データシートでの入力で、Aに100、Bに30と入力した瞬間にCに70と表示させたいなら、C:[A]+[B]としたクエリを作成し、クエリで入力すればできます。ただしCはテーブルのフィールドではないので保存されません。 AとBを件数分入力した後、Cを一括で計算させたいなら、上記のクエリを更新クエリにして実行すればできます。 頑張ってくださいヽ(^。^)ノ
お礼
回答ありがとうございます。 色々、やってみたいとおもいます。
補足
どうもありがとうございます。 フォームを使ってC=A-Bを行おうとしています。 フォームも作って、フォームAとBに更新後処理を 入れましたがCが更新されません。。。 式ビルダで [C] = [A] - [B]と入れました。 (入力後の表示は =[C]=[A]-[B])となっていますが大丈夫でしょうか?) その後、フォームよりAとBを入力しましたが、 テーブルのAとBは正しく更新されています。 しかし、Cはそのままです。