【问题标题】:SQL Query in Access not applying WHERE clauseAccess 中的 SQL 查询未应用 WHERE 子句
【发布时间】:2017-01-28 20:12:58
【问题描述】:

我是一名业余 vba 程序员,目前正在努力解决以下问题:

我为我的 VBA 程序编写了一个简单的 SQL 查询,用于从 Access 中的现有查询 (GroupedData) 中提取数据:

Dim strSQL as string
Dim db as dao.database
dim rs as dao.recordset

strSQL = "SELECT GroupedData.EmployeeID, GroupedData.End, GroupedData.LOB, GroupedData.Position, GroupedData.WorkStatus " & _
    "FROM GroupedData WHERE (((GroupedData.End) Is Null) AND ((GroupedData.Position)=0) AND ((GroupedData.WorkStatus)=0));"

Set db = OpenDatabase(MY_DB, dbOpenDynaset)
Set rs = db.openrecordset(strSQL, dbOpenSnapshot)

Do While Not rs.EOF
    ListBox1.AddItem rs!EmployeeID
    rs.MoveNext
Loop

所以我的问题是 SQL 运行平稳,但没有应用任何过滤器(即 where 子句 - 它生成工作状态和位置包含高于 0 的值的记录)

我过去做过这样的查询,没有任何问题。不过这次我卡住了

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 请删除 WHERE 子句中的所有括号。此外,查看别名,它们会缩短您的代码并使其更具可读性。像这样:SELECT gd.EmployeeID FROM GroupedData gd
  • 除了化妆品,查询应该可以正常工作。
  • 感谢您的提示,但去掉括号后,代码仍然无法产生正确的结果。如果我将此代码粘贴到访问中,它会非常出色
  • 只是为了好玩,在添加记录之前清除列表框。如果问题不是您的查询(而且似乎不是),那么问题可能是您还有其他地方也填充了列表框。
  • 仔细检查并逐行运行代码。这不是问题

标签: sql vba ms-access


【解决方案1】:

好的,我已经解决了这个问题。这是发生的事情: 我制作了一个单独的函数,它根据 EmployeeID 检索员工姓名。但是在那个函数中,我以相同的方式声明了记录集和数据库,即:rs 和 db。当我运行查询时发生的事情是它正在过滤第一条记录,但其余的都没有过滤,因为它们是基于函数内的记录集(当然是所有员工)这样一个愚蠢的错误:) 谢谢反正

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2015-10-30
    相关资源
    最近更新 更多