2012-01-17 18 views
1

Access 2003でデータベースを作成しようとしていますが、別の関連テーブルのデータに基づいて検証するフィールドがあります。他のテーブル/クエリのデータを使用したアクセステーブルの検証

たとえば、カテゴリの表とその最小目標があります。毎月個別に設定する各カテゴリの実際の目標を保持する別のテーブルを作成しています。毎月最小の目標を満たしていないと私に警告するための検証ルールが必要です。私はこれをどのようにすることができますか?

+0

あなたがいずれかの段階でアップグレードする場合は、アクセス2010は、データマクロを持っていますhttp://office.microsoft .com/en-us/access-help/create-a-data-macro-HA010378170.aspx – Fionnuala

+1

「目標」とは、生産や販売など、完全に管理されているのではなく、これは本当ですか?目標が必要な目標を満たすのに失敗した場合、どうしたらよいでしょうか?あなたはただの警告を必要としますか、またはエントリーを許可しないのですか? – Fionnuala

答えて

0

妥当性検査がいつどこで完了するかによって異なります。 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関数はメモリ集約的であり(すなわち、クエリ内で使用している場合)、レコードを大量に、クエリを完了するのにかかる時間が大幅かつ顕著である。というけれども注意してください

+1

それは、それはMS Accessでコンパイルされません。 – Fionnuala

+0

心配しなくても、それはどのように機能するかについてのガイドにすぎません。 –

2

チェック制約を使用すると、現在のカテゴリの目標を参照テーブルの最小目標以上にする必要があります。

この例では、現在の目標値は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 
関連する問題