【问题标题】:Access VBA Filtering a combo box list based on Date fieldAccess VBA根据日期字段过滤组合框列表
【发布时间】:2015-07-26 14:46:47
【问题描述】:

这是我用来过滤 EquipmentID1 组合框的代码行:

    EquipmentID1.RowSource = "SELECT tblEquipment.Equipment, tblEquipment.UnavailableFrom FROM tblEquipment WHERE tblEquipment.UnavailableFrom >= " & Me!EndDate & " OR tblEquipment.UnavailableFrom Is Null;"

UnavailableFrom 是 tblEquipment 表中的日期/时间字段,它可以为空。但是 RowSource 似乎根本不起作用。但是,当我在 OR 之后删除零件时它确实有效,但随后它会忽略具有空白 UnavailableFrom 字段的设备...帮助!谢谢!

【问题讨论】:

    标签: sql ms-access combobox vba


    【解决方案1】:

    我的猜测是您只需要引用您尝试使用的日期即可。 Access SQL 中的日期需要用# 字符引用。试试这个:

    EquipmentID1.RowSource = _
      "SELECT tblEquipment.Equipment, tblEquipment.UnavailableFrom " & _
      "FROM tblEquipment " & _
      "WHERE tblEquipment.UnavailableFrom >= #" & Me!EndDate & "# " & _
        "OR tblEquipment.UnavailableFrom Is Null;"
    

    【讨论】:

    • 嗯,我试过你说的,它奏效了。但我不明白为什么 "SELECT tblEquipment.Equipment, tblEquipment.UnavailableFrom " & _ "FROM tblEquipment " & _ "WHERE tblEquipment.UnavailableFrom >= " & Me!EndDate & ";"没有 # 也可以工作。
    • 不确定。也许没有其他任何内容,Access 能够解析它并确定它是一个日期,但是使用以下文本,它试图将您的日期转换为 SQL 语法的一部分。
    • 如果没有 # 字符,数据库引擎会将 5/14/2015 解释为 5 除以 14 除以 2015 ... 这是一个非常小的数字:1.77242112725984E-04。在WHERE 比较的上下文中,db 引擎将该数字视为日期/时间值 1899 年 12 月 30 日上午 12:00。因此查询将返回 UnavailableFrom 值 >= Dec 30, 1899 12:00 AM 的所有行。
    • 不完全是......它是 >= 1899-12-30 00:00:15.314
    【解决方案2】:

    如果在非美国环境中操作,您还必须强制日期表达式字符串的格式:

    EquipmentID1.RowSource = _
      "SELECT tblEquipment.Equipment, tblEquipment.UnavailableFrom " & _
      "FROM tblEquipment " & _
      "WHERE tblEquipment.UnavailableFrom >= #" & Format(Me!EndDate, "yyyy\/mm\/dd") & "# " & _
        "OR tblEquipment.UnavailableFrom Is Null;"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多