繁体   English   中英

查询是只读的,可能是由于聚合值

[英]Query is read-only probably due to an aggregated value

有一个现有的 MS-Access 项目(不是由我完成的),人们希望在数据表中添加一个额外的列以用于高级过滤器。

想象一下在数据表视图中填充表单的简单直接查询。 人们可以使用内置过滤器和排序选项。

对于基础表(我们称之为MainTable ),还有另一个带有审计数据的相关表(称之为AuditTable )。 MainTable任何更改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

将此添加到基础查询并在新列中显示值非常有效。 过滤,排序,一切正常。 我尝试了它以及子选择的列和作为从子句中加入辅助查询

但是现在出现了这个问题:

数据表突然变为只读。 用户不能再更改那里的任何数据。

我发现,包含聚合数据和/或子选择或查询组成的堆叠查询的查询将导致只读记录集(由 Allen Brown 列出)

这是问题:

是否有任何方法可以在不将 RecordSource 更改为只读集的情况下将此类数据包含在记录集中?

一些简单的样本数据

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 中以某种方式可见,而无需将记录集更改为read-only

希望这很清楚,TIA!

您可以使用域聚合函数,例如DCount ,但它会更慢。

例如:

select t.*, dcount("*","AuditTable","MainTableID=" & t.ID & " and Accepted=0") as OpenAudits
from MainTable t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM