1つだけ過去を変えられるとしたら?

ビスタでAccess2007を使っています

あるテーブルにA~Dまでのフィールドが設定されています。

フォームでフィールドA.Bは手入力して
C.Dには計算式を設定して計算結果を表示させていますがテーブルに反映されません。
(フォームにはきちんど式通りの答えが表示されますがテーブルのフィールドC.Dは空っぽです。)


A・・・10,000
B・・・0.1
C・・・1,000(計算式 A*B)
D・・・9,000(計算式 A-C)

フォーム上で行った計算結果をテーブルに入力反映させるにはどうすればよいでしょうか?
テーブルやフォームの作り方が悪いのか?
計算式の設定が悪いのか?
なぜテーブルに反映しないのか理由がわかりません。

そもそもフォーム上での計算はテーブルには反映しないのか?
だとすれば反映させるにはどうすればよいのでしょうか?
テーブルのフィールドに計算式を設定することは出来るのでしょうか?
出来るとすればその方法は?

疑問だらけでどうすれば求める結果が得られるのかさっぱり解りません。
当方Access2007は初心者も同然ですのでわかりやすく解説して戴ければ幸いです。
よろしくご教授ください。

A 回答 (5件)

#1です。


2007の試用版で確認したらマクロツール-デザインリボンの
全てのアクションの表示をクリックすると値の代入コマンドが
現れるようです。
「Access2007 フォームでの計算結」の回答画像5
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
なかなかうまくいきませんが何とか結果をだそうと思います。
回答ありがとうございました。

お礼日時:2009/12/24 13:13

#3です



> テーブルにも「計算C.D」のフィールドを追加しなくてもよいのでしょうか?
> それともフォーム上だけでいいですか?

ごめんなさい。
私の書き方が悪かったのか、・・・・

コントロールソースを使いたさそうな感じがしたので、前回の回答になってしまいました。
前回のは、値用、計算表示用を分けて考えたので、「計算C,D」はフォーム上だけのものになります。

ただ、前回のは[A][B]の入力で、[C][D]を確定させるやり方になります。

書き忘れていましたが、[C][D]は、連結状態であることが基本となります。
(コントロールソースは計算式ではなく、テーブル/クエリのフィールド名が指定されている)

通常操作では、[A][B]を入力したら[C][D]は計算するけど、
この時だけは、[C][D]を計算式以外の値を入力したい、とかあったとすると、
また違った方法をとることになります。
(コントロールソースを使用しないやり方)


一度、新規accdbとかにサンプルテーブルを作成してみて、
小さい環境で確かめられるとよいと思います。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
なかなかうまくいきませんが何とか結果をだそうと思います。
回答ありがとうございました。

お礼日時:2009/12/24 13:14

フォーム上の話で良いですよね。



値を扱うもの、計算結果を表示するものを分けて考えます。

C, D の値を扱うものはそのままで、「可視」を「いいえ」としておきます。

計算結果を表示するテキストボックスを追加します。(C, D をコピーしてもOK)
テキストボックスの名前を「計算C」「計算D」と仮定します。

それぞれのコントロールソースを設定します。
「計算C」は、 =[A]*[B]
「計算D」は、 =[A]-[計算C]

A, B に入力があると「計算C」「計算D」に結果が表示されますが、
このままでは値を扱う「C」「D」は更新されないので、
フォームの「更新前処理」で値を設定してあげます。

Private Sub Form_BeforeUpdate(Cancel As Integer)
  Me.C = Me.計算C
  Me.D = Me.計算D
End Sub



テキストボックス「計算C」「計算D」のプロパティは必要に合わせ設定してください。
文字配置 / 編集ロック / タブストップ 等

この回答への補足

回答ありがとうございます。

テーブルにも「計算C.D」のフィールドを追加しなくてもよいのでしょうか?
それともフォーム上だけでいいですか?

よろしくご教授ください。

補足日時:2009/12/18 19:44
    • good
    • 1

>C.Dともに各プロパティシートのデータタブ内のコントロールソース



やはりコントロールソースを変更しちゃっているのですね。
この状態はフォームコントロールの名前はCやDですが、テーブル
とは切り離されていますので、反映されないわけです。
コントロールソースはC、Dの元に戻し、とりあえずイベントの
フォーカス取得時にマクロを設定してみてください。
フォームデザインを開いたままで、マクロの作成を行い、
画像のようにアイテムに[FORMS]![本当のフォームの名称]![C]
式に[FORMS]![本当のフォームの名称]![A]*[FORMS]![本当のフォームの名称]![B]
と入れて登録して動かしてみてください。
「Access2007 フォームでの計算結」の回答画像2

この回答への補足

再びの回答ありがとうございます。

アクセス2007のどこを探せばよいのでしょうか?
「値の代入」というアクションを見つけることが
出来ません・・・。

なにぶんマクロはさっぱり理解しておりませんので
もう少し詳しい手順をご教授ください。

よろしくお願いいたします。

補足日時:2009/12/18 19:40
    • good
    • 0

>C.Dには計算式を設定して計算結果を表示させています


これはどのようにされていますか?(マクロ?VBA?)
もしコントロールソースに最初 C と入っていた場所に
=[A]*[B]のようにされたのであれば、フォーム「C」は
テーブルのC列から切り離されて、唯の計算結果を表す場所と
なっていますので、当然CやD列には保存されません。
マクロでされるのであればイベントの所のフォームA、Bの変更時と
フォームCのフォーカス取得時に値の代入マクロを作成しセットして
おくと良いのではないでしょうか。
(当方2000しかないので2007と違うので正確にお伝えできませんので、雰囲気読み取ってもらえれば。。)

この回答への補足

C.Dともに各プロパティシートの
データタブ内のコントロールソースと
イベントタブ内の更新前処理に
それぞれ同じ式が入っています。

マクロはいまひとつ良く理解できていないので・・・

補足日時:2009/12/17 11:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!