![](/img/trans.png)
[英]SELECT query is read-only probably because of a concatenated JOIN expression
[英]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.