【发布时间】:2013-08-25 21:47:11
【问题描述】:
有没有办法根据用户在文本框中的输入来限制查询中返回的记录数?我知道如果记录数不变,我可以使用最高值,但这个数字会改变。我试过了:
SELECT TOP[Forms![frm_GenerateMailout]![MailoutSize]]
..但这没有用。
【问题讨论】:
标签: sql ms-access ms-access-2007
有没有办法根据用户在文本框中的输入来限制查询中返回的记录数?我知道如果记录数不变,我可以使用最高值,但这个数字会改变。我试过了:
SELECT TOP[Forms![frm_GenerateMailout]![MailoutSize]]
..但这没有用。
【问题讨论】:
标签: sql ms-access ms-access-2007
这取决于您使用 SQL 语句的方式和位置,但如果将其构造为字符串,则需要正确连接:
"SELECT TOP " & Forms!frm_GenerateMailout!MailoutSize & ".. etc."
【讨论】:
“有没有办法根据用户在文本框中的输入来限制查询中返回的记录数?”
Access SQL 不接受带有SELECT TOP 的任何类型的参数。
很遗憾,当您尝试时,错误消息(#3141)并没有明确指出问题:
“SELECT 语句中包含的保留字或参数名称拼写错误或缺失,或者标点符号不正确。”
如果您可以使用 VBA 构建您的 SELECT,您可以通过将数字构建到字符串中,如 Andy 所描述的那样轻松解决这个问题。或者,您可以使用 Replace() 将您的 MailoutSize 值替换为预构建 SQL 语句中的占位符。
所以从...开始
strTemplateSql = "SELECT TOP 100 PERCENT tblFoo.*" & vbCrLf & _
"FROM tblFoo;"
你可以这样做......
strSelect = Replace(strTemplateSql, "100 PERCENT", _
Forms!frm_GenerateMailout!MailoutSize)
还有其他可能性。如果我们的建议都不适合您的情况,请告诉我们您需要在何处以及如何使用该查询。
【讨论】: