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

MS Access data validation: total of child records cannot exceed parent value

在过去的几个月里,我创建了一个非常简单的访问应用程序来跟踪我工作的公司的费用,(明确一点:它是一个非常简单的数据库,但它完成了工作并且我的同事们很乐意使用它而不是他们习惯的旧 PenAndPaper 方法,无论如何......)我的应用程序的一个特点是它将每笔费用分配给一个或多个成本中心(例如,如果我们购买material 的 1000 欧元,我们登记费用,然后我们可以登记我们在成本中心 A 使用了 600 欧元,在成本中心 B 使用了 400 欧元。

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

费用(idExpense,成本)

中心(idCenter,canterName)

分配(idAllocation,idExpense,idCenter,allocatedCost)

在"Expenses" table中字段cost是已经花费的,而Allocationtable在Centers和Expenses之间建立了多对多的关系。所以,在上面的例子中我们将有:

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 的费用!我需要在数据输入阶段防止这种情况,因为很可能是打字错误,但我不知道该怎么做。我所做的就是防止单次分配超过费用金额,并且我编写了一个简单的查询来查找这种情况,因此我可以手动检查它们,但我希望表格在数据出现时检查它被馈送到数据库。

由于您使用的是 Access 2010,因此您可以让 Before Change data macro 执行验证。为此,请在 Access

中创建名为 [TotalAllocatedCostByIDExpense] 的已保存查询
SELECT Allocations.IDExpense, Sum(Allocations.AllocatedCost) AS SumOfAllocatedCost
FROM Allocations
GROUP BY Allocations.IDExpense;

然后在 [Allocations] table

上使用以下更改前数据宏