2012-02-14 1 views
0

2つの他のコントロールフィールド値に基づいた計算であるデータをテキストボックスに入れたい - 値がnullの場合(つまり、データベースの現在の値がnullの場合)。アクセス2010式ビルダー

デフォルト値プロパティの式ビルダーで=([control1] * [Control2])/ 1000を入力しましたが、結果は常に空であることを示します(control2とcontrol2にも値が入っています)。

どうすればこの問題を解決できますか?このような操作はコードビハインド、つまりVBでのみ行うことができますか?

おかげで、

KS

答えて

1

フォームのレコードソースのフィールドにバインドされたコントロールについて説明していると思います。また、基になるフィールドがNullの場合は、コントロールに計算値がロードされます。

この解釈が正しい場合は、フォームの「オンカレント」イベントから実行できます。

If IsNull(Me.txtYourTextBox) Then 
    Me.txtYourTextBox = (Nz(Me.control1) * Nz(Me.Control2))/1000 
End If 
、テキストボックスに計算された値をロードし、必要に応じて、ユーザーがその値を変更することができ、かつ、レコードが保存されるときにバインドされたフィールドに値を格納します

バインドされたフィールドがNullでない場合、その値はOn Currentコードによって変更されることなくテキストボックスに表示されます。

それはあなたが望むものですか?

+0

はい、これはちょうど私が後にしていることです - それは表現として行うことができることを望んでいました - しかし大きな問題はありません。ありがとうございました。 – Perplexed

0

のForm_Loadイベントを追加し、この使用してVBAを達成するために。デザインビューでフォームを開き、フォームのプロパティで[イベント]タブをクリックし、[イベント時のプロシージャ]を選択して[オンロード]をクリックします。 この例では、[TextField]を使用してテーブルデータを参照しています。

Private Sub Form_Load() 
    TextControl.SetFocus 
    If IsNull([TextField]) Then 
    TextControl.Text = ([Control1] * [Control2])/1000 
    End If 
End Sub 
+0

ありがとう、VBAが唯一の方法であるように見えます。 – Perplexed

+0

です。私は同様のコードをIIf(...)を使ってDefaultValueを設定しようとしましたが、現時点では説明できない理由でTextBoxを設定しませんでした。 –

+1

フォームが1つのレコードだけを表示するのでない限り、loadイベントは適切ではないと私は考えます。私は現在のイベント、おそらく2つの関連するコントロールのアップデート後のイベントに行きます。最も適切なイベントを選択するためには、フォームの流れを知る必要があります。 – Fionnuala

関連する問題