使用来自其他表/查询的数据访问表验证

时间:2012-01-17 02:56:23

标签: ms-access

我正在尝试在Access 2003中组建一个数据库,并且我在一个表中有一个字段,我想根据另一个相关表中的数据进行验证。

例如,我有一个类别表及其最低目标。我正在创建另一个表来保存我将每个月独立设置的每个类别的实际目标。所以我需要一个验证规则来警告我,如果我没有达到每个月的最低目标。我可以这样做吗?

2 个答案:

答案 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。因此,您将语句文本加载到字符串变量中,并从CurrentProject.Connection(这是一个ADO对象)执行它:

CurrentProject.Connection.Execute strDdl

答案 1 :(得分:0)

这取决于您希望验证完成的时间和地点。在Access 2003中,无法像SQL Server中那样在表格中完成验证。

一个简单的解决方案是使用DLookup函数从Goal表中查找Goal值,然后将该值与Category表中的最小目标进行比较。

If CategoryGoalValue == DLookup('MinGoal', 'Goal', 'Goal = ''' & CategoryName & '''') Then    
  'Minimum Goal Met    
Else    
  'Warning - Minimum Goal Not Met    
End If    

请注意,尽管DLookup功能占用大量内存并且存在大量记录(例如,如果在查询中使用),完成查询所花费的时间非常重要且显而易见。