簡體   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