MS Access数据验证:子记录总数不能超过父值

时间:2015-01-01 22:07:19

标签: sql ms-access-2010 data-entry

在过去的几个月里,我创建了一个非常简单的访问应用程序,以跟踪我工作的公司的费用,(只是要明确:它是一个非常简单的数据库,但它完成了工作,我的同事们很高兴使用它而不是他们习惯使用的旧PenAndPaper方法,无论如何...)我的应用程序的一个功能是它将每个费用分配给一个或多个成本中心(例如,如果我们购买1000€材料,我们注册费用,然后我们可以注册我们在成本中心A使用600€,在成本中心B使用400€。

我有3个表(我只会编写与手头问题相关的表和字段):

费用( idExpense ,费用)

中心(的 idCenter 下,canterName)

分配(的 idAllocation 下,idExpense,idCenter,allocatedCost)

在“费用”表中,字段成本是已花费的,而分配表在中心和费用之间建立多对多关系。因此,在上面的考试中我们将:

Center
IDCenter name
1        Center A
2        Center B

Expenses
IDExpenses cost
1          1000

Allocations
IDAllocations IDCenter IDExpense AllocatedCost
1             1        1         600
2             2        1         400

现在的问题是我不知道如何验证AllocatedCost字段中的数据:假设我添加了另一笔费用

Expenses
IDExpenses cost
1          1000
2           100

没有什么能阻止用户像这样分配它:

Allocations
IDAllocations IDCenter IDExpense AllocatedCost
1             1        1         600
2             2        1         400
3             1        2          60
4             2        2          50

在这种情况下,我最终得到一个无效的条目110€分配给一个只有1000的费用!我需要在数据输入阶段阻止这种情况,因为很可能是打字错误,但我不知道如何做到这一点。我设法做的就是防止单个分配超过费用的金额,我写了一个简单的查询来查找这种情况,所以我可以手动检查它们,但我希望表单在数据时检查它被送到DB。

1 个答案:

答案 0 :(得分:1)

由于您使用的是Access 2010,因此可以使用Before Change data macro执行验证。为此,在Access中创建名为[TotalAllocatedCostByIDExpense]的已保存查询

SELECT Allocations.IDExpense, Sum(Allocations.AllocatedCost) AS SumOfAllocatedCost
FROM Allocations
GROUP BY Allocations.IDExpense;

然后在[Allocations]表中使用以下Before Change数据宏

BeforeChange.png