Microsoft Access查询

时间:2017-07-06 10:48:02

标签: sql ms-access

我有一个设置表,用于存储使用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

谢谢!

3 个答案:

答案 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