2011-06-29 22 views
3

私はMS Access 2007を使用しています。電話番号フィールド(セル、自宅、仕事、プライマリ*)のあるフォームがあります。これらのすべてのフィールドのデータソースは、Customersテーブルから取得されます。MS Accessの条件付きデフォルト値

基本的に、私がしようとしているのは、プライマリ*フィールドのデフォルト値のセットを確立することです。

If [cell] <> Null: 
    primary* = [cell] 

elif [cell] Is Null and [home] <> Null: 
    primary* = [home] 

elif [cell] Is Null and [home] is Null and [work] <> Null: 
    primary* = [work] 

私は、これは非常に論理的なコードではないですけど、私はあなたが私がここでやろうとしているかを見ることができることを望む:私はこのような何かを達成したいと思います。プライマリ*フィールドにセル番号がある場合はそれをデフォルトにし、セルがない場合は自宅の番号を使用し、使用できる唯一の番号があれば作業番号にします。

Accessの[プロパティ]パネルでこれを行う方法はありますか?

+0

データを複製しない(同じ電話番号をデフォルトのフィールドにコピーする)必要はありません。代わりに、どの番号がデフォルトであるかを識別することを目的としたフィールドが必要です。これを行う最も簡単な方法は、整数フィールドで行い、オプショングループを使用して結果を表示します。 –

答えて

1

データコントロールのデフォルト値プロパティは、新しいレコードが開始された瞬間に評価/適用されます。新しいレコードがテーブルに挿入される前に起こることは明らかです。ユーザーがを入力してから、新しいレコードにというデータが入力される前に発生する可能性はあまりありません。したがって、別のフィールド値に基づいてデフォルト値を持つことができたとしても、デフォルト値が割り当てられていない限り、他のフィールドはその時点でNullになります。

異なる状況では、フォームのbefore insertイベントを使用して、ターゲットコントロールに必要なコントロール値を割り当てることができます。ただし、レコードを保存する前にユーザーがデフォルトのプライマリ値を変更したい場合は、これはあまり適していません。

個別の電話番号コントロールで更新後のイベントを使用することに戻ります。したがって、更新後の[セル]の場合は、次のように使用できます。

If IsNull(Me.primary) Then 
    Me.primary = Me.cell 
End If 

などです。

ユーザーまたはコードがMe.primaryに値を割り当てた後で、ユーザーがそれを変更しない限り変更されません。

1

コントロールが読み込み専用である場合は、ソースコントロールとして式を使用するだけで済みます。このような何か:

=iif(IsNull(Cell);iif(IsNull(Home);Work;Home);Cell) 

あなたがコントロールが編集可能になりたい場合は、動的に私が推測OnActivateイベントイベントでの背後にあるコードでコントロールソースを変更する必要があります(私はそれをテストしていません)。

関連する問題