我有一个设置表,用于存储使用Microsoft Access构建的应用程序的不同设置键 其中一个设置键驱动下拉列表中应显示的记录数 列表后面的查询类似于下面的查询:
Select Top 3 id, name FROM tblRegular
现在,我希望实现这样的目标:
Select Top (Select keyValue FROM tblSettings WHERE key="rowNumber") id, name FROM tblRegular
但是,像这样使用它不起作用,因为它会触发错误 有人可以告诉我它是否可以完成?
编辑:表结构类似于下面的结构: tblRegular:
id | name
1 'A'
2 'B'
3 'C'
tblSettings:
id | key | keyValue
1 'rowNumber' 2
谢谢!
答案 0 :(得分:1)
考虑使用相关子查询的纯SQL解决方案来计算 rowCount ,然后在外部查询中使用它来按行数过滤:
SELECT main.id, main.[name]
FROM
(SELECT t.id, t.[name],
(SELECT Count(*) FROM tblRegular sub
WHERE sub.[name] <= t.[name]) AS rowCount
FROM tblRegular t) AS main
WHERE main.rowCount <= (SELECT Max(s.keyValue) FROM tblSettings s
WHERE s.key = 'rowNumber')
或者使用域聚合DMax()
:
SELECT main.id, main.[name]
FROM
(SELECT t.id, t.[name],
(SELECT Count(*) FROM tblRegular sub
WHERE sub.[name] <= t.[name]) AS rowCount
FROM tblRegular t) AS main
WHERE main.rowCount <= DMax("keyValue", "tblSettings", "key = 'rowNumber'")
答案 1 :(得分:0)
此语法在Access SQL中失败,在“选择”时使用(本地化)消息咆哮,如:
SELECT语句包含保留字或参数,即 拼写错误或丢失,或标点符号不正确。
答案 2 :(得分:0)
好的,所以,刚才发现使用Select语句就像问题一样,会触发上面提到的错误。因此,有效的方法是更改表单加载下拉列表的.RowSource,并且在rowsource中放置的查询应如下所示:
Select Top (" & rowNr & ") id, name FROM tblRegular
使用另一个SQL查询或甚至DAO / ADO函数从数据库中检索值来获取rowNr