有一个现有的MS-Access项目(不是我做的(,人们希望在高级过滤器的数据表中增加一个列。
试想一下,在数据表视图中向表单填充一个简单的直接查询。人们可以使用内置过滤器和排序选项。
对于基础表(我们称之为MainTable
(,还有另一个包含审计数据的相关表(称为AuditTable
(。MainTable
的任何更改都将写入此AuditTable
,并且必须由另一个进程中的超级用户接受。
现在,我想将尚未接受的审计行计数添加到可见数据表中。类似的东西
SELECT Count(*) AS OpenAudit
FROM AuditTable
WHERE MainTableID=MainTable.ID --<-- MainTableID is the FK in AuditTable onto the ID of MainTable
AND Accepted=0
GROUP BY MainTableID
将其添加到基础查询并在新列中显示值非常有用。过滤,排序,一切效果都很好。我尝试了它以及子选择的列,并作为from 子句中连接的侧查询。
但现在有这个问题:
数据手册突然变为只读。用户无法再更改那里的任何数据。
我发现,包含聚合数据和/或子选择或堆叠查询的查询将导致只读记录集(Allen Brown 的列表(。
问题来了:
是否有任何方法可以在不将记录源更改为只读集的情况下将此类数据包含在记录集中?
一些简单的示例数据
MainTable
ID SomeValue OneMore
1 val 1 more 1
2 val 2 more 2
3 val 3 more 3
AuditTable
ID MainTableID Accepted --(+ more columns with fieldname, valueBefore and valueAfter etc)
1 1 1
2 1 0
3 2 1
4 3 0
5 3 0
The expected Result
ID SomeValue OneMore CountOfOpenAudits
1 val 1 more 1 1
2 val 2 more 2 0
3 val 3 more 3 2
此附加列应以某种方式在用户的 GUI 中可见,而无需将记录集更改为只读。
希望这是清楚的,TIA!
您可以使用域聚合函数,例如DCount,但是它会更慢。
例如:
select t.*, dcount("*","AuditTable","MainTableID=" & t.ID & " and Accepted=0") as OpenAudits
from MainTable t