2

在过去的几个月里,我创建了一个非常简单的访问应用程序来跟踪我工作的公司的费用,(需要说明的是:它是一个非常简单的数据库,但它完成了工作,我的同事们都很高兴使用它而不是他们习惯的旧 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 的费用!我需要在数据输入阶段防止这种情况发生,因为很可能是输入错误,但我不知道该怎么做。我所做的就是防止单个分配超过费用的金额,我编写了一个简单的查询来查找这种情况,所以我可以手动检查它们,但我希望表格在数据时检查它被馈送到数据库。

4

1 回答 1

1

由于您使用的是 Access 2010,因此您可以让更改前数据宏执行验证。为此,请在 Access 中创建一个名为 [TotalAllocatedCostByIDExpense] 的已保存查询

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

然后在 [Allocations] 表上使用以下更改前数据宏

更改前.png

于 2015-01-02T14:20:12.977 回答