MS ACCESS查询使用表单来构建WHERE子句

时间:2009-10-22 20:45:34

标签: sql ms-access ms-access-2007

我需要能够读取一个组合框来确定要用于where子句的列。 简单的例子就是 SELECT * FROM TABLE WHERE [Forms]![frmNameWhatever]![ComboTime] BETWEEN [blah]![blah]![blah]和[blah]![blah]![blah]

blah blah blah work ...第一部分,就在那之后,返回零行...... 我使用了错误的语法吗? 我已经尝试过这个w /文本框,它仍然返回零行... 对不起有人可能不得不重新写这个,但我累了..它结束了一天

感谢您的帮助^^

3 个答案:

答案 0 :(得分:1)

尝试在您的BETWEEN值周围加上英镑符号。

BETWEEN #8:00 AM# and #12:00 PM#

创建动态SQL字符串:

strSQL = _
   "Select myColumns FROM myTable WHERE " & Me.myComboBox & " BETWEEN #" & _
   Me.MyFirstTextBoxDate & "# AND #" & Me.MySecondTextBoxDate & "#"

答案 1 :(得分:1)

您可以连接sql语句并使用RunSQL运行它,如下所示:

DoCmd.RunSQL("(SELECT * FROM TABLE WHERE " & Forms("frmNameWhatever").ComboTime.Value & " BETWEEN [blah]![blah]![blah] AND [blah]![blah]![blah]);")

答案 2 :(得分:0)

在SQL代码中对表单的控件名称进行硬编码可能不是一个好主意。考虑具有强类型参数的PROCEDURE,例如ANSI-92 Query Mode语法:

CREATE PROCEDURE GetOrdersByPeriod
(
 :start_date DATETIME, 
 :end_date DATETIME
)
AS 
SELECT OrderID, CustomerID, OrderDate
  FROM Orders
 WHERE OrderDate BETWEEN :start_date AND :end_date;

然后,您可以通过将控件的值作为参数传递来EXECUTE此处理。