Access 2003でデータベースを作成しようとしていますが、別の関連テーブルのデータに基づいて検証するフィールドがあります。他のテーブル/クエリのデータを使用したアクセステーブルの検証
たとえば、カテゴリの表とその最小目標があります。毎月個別に設定する各カテゴリの実際の目標を保持する別のテーブルを作成しています。毎月最小の目標を満たしていないと私に警告するための検証ルールが必要です。私はこれをどのようにすることができますか?
Access 2003でデータベースを作成しようとしていますが、別の関連テーブルのデータに基づいて検証するフィールドがあります。他のテーブル/クエリのデータを使用したアクセステーブルの検証
たとえば、カテゴリの表とその最小目標があります。毎月個別に設定する各カテゴリの実際の目標を保持する別のテーブルを作成しています。毎月最小の目標を満たしていないと私に警告するための検証ルールが必要です。私はこれをどのようにすることができますか?
妥当性検査がいつどこで完了するかによって異なります。 Access
2003では、SQL Server
のように、テーブルに検証が完了していない可能性があります。
単純なソリューションは、DLookup関数を使用して目標表から目標値を検索し、その値をカテゴリ表の最小目標と比較することです。
If CategoryGoalValue == DLookup('MinGoal', 'Goal', 'Goal = ''' & CategoryName & '''') Then
'Minimum Goal Met
Else
'Warning - Minimum Goal Not Met
End If
のDLookup関数はメモリ集約的であり(すなわち、クエリ内で使用している場合)、レコードを大量に、クエリを完了するのにかかる時間が大幅かつ顕著である。というけれども注意してください
それは、それはMS Accessでコンパイルされません。 – Fionnuala
心配しなくても、それはどのように機能するかについてのガイドにすぎません。 –
チェック制約を使用すると、現在のカテゴリの目標を参照テーブルの最小目標以上にする必要があります。
この例では、現在の目標値はcurrent_goals
という名前のテーブルに格納されています。このテーブルには、2つのフィールドが含まれています。category_id
;およびgoal
。
参照表は、min_goals
という名前で、2つのフィールド:category_id
;およびgoal_floor
。
ALTER TABLE current_goals
ADD CONSTRAINT valid_goal
CHECK (
goal >= (
SELECT goal_floor
FROM min_goals
WHERE min_goals.category_id = current_goals.category_id
)
);
ADOの下でDDL文を実行する必要があります。 DAOはチェック制約を含むDDLを処理できません。だから、あなたは(ADOオブジェクトである)文字列変数に文のテキストをロードし、CurrentProject.Connection
からそれを実行します。
CurrentProject.Connection.Execute strDdl
あなたがいずれかの段階でアップグレードする場合は、アクセス2010は、データマクロを持っていますhttp://office.microsoft .com/en-us/access-help/create-a-data-macro-HA010378170.aspx – Fionnuala
「目標」とは、生産や販売など、完全に管理されているのではなく、これは本当ですか?目標が必要な目標を満たすのに失敗した場合、どうしたらよいでしょうか?あなたはただの警告を必要としますか、またはエントリーを許可しないのですか? – Fionnuala