【问题标题】:MS ACCESS query using form to build WHERE clause使用表单构建 WHERE 子句的 MS ACCESS 查询
【发布时间】:2009-10-22 20:45:33
【问题描述】:

我需要能够阅读组合框来确定要用于 where 子句的列。 简单的例子是 SELECT * FROM THERE [Forms]![frmNameWhatever]![ComboTime] [blah]![blah]![blah] AND [blah]![blah]![blah]

blah blah blah 工作......第一部分,在 where 之后,返回零行...... 我使用了错误的语法吗? 我也用文本框试过这个,它仍然返回零行...... 抱歉,有人可能不得不重新写这篇文章,但我累了.. 一天结束了

感谢您的帮助^^

【问题讨论】:

  • blah!blah!blah 代表什么?您的表单上有更多控件吗?
  • 是的,我会编辑这个。但是,blah!blah!blah 是起作用的部分,就在 WHERE 关键字之后,需要是“动态的”。我想知道它是否可能在 Access 中,将其更改为取决于在组合框中选择的内容

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


【解决方案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 & "#"

【讨论】:

  • 值之间的工作完美。但是,在 WHERE 关键字之后,需要是“动态的”。我想知道它是否可能在 Access 中,将其更改为取决于在组合框中选择的内容
  • 我会试试这个,但我感觉你误解了我的问题。在您的示例中,我需要“myDateColumn”来自组合框中的值,组合框中的值将表示表中的一列。所以,WHERE [comboxboxvalue] BETWEEN [textboxdate] AND [textboxdate]
  • 我进行了编辑,但当然,现在您需要一种方法来执行它。这个字符串是进入子表单的数据源还是类似的东西?
  • 嗯,我看到你在使用 vba...我使用的是查询设计器的 sql 形式...我试图避免很多工作..
  • 您可以在查询设计器中根据表单控件设置条件,但我不相信您可以通过这种方式动态指定列。如果你尝试,你会得到表单控件的值作为列输出,而不是表格列的值。
【解决方案2】:

您可以像这样连接一条 sql 语句并使用 RunSQL 运行它:

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

【讨论】:

    【解决方案3】:

    在 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 这个过程。

    【讨论】:

    • 我的问题是 WHERE 关键字后面的“项目”(在我们的示例中是 OrderDate),需要是“动态的”。我想知道它是否可能在 Access 中,将其更改为取决于在组合框中选择的内容
    • 所以有多个过程——GetOrderByOrderDate、GetOrderByRequiredDate、GetOrderByShippedDate 等——然后使用你的组合框的值“动态”选择所需的过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多