【问题标题】:VBA select not returning any rowsVBA选择不返回任何行
【发布时间】:2009-07-23 10:06:29
【问题描述】:

以下查询未将任何行返回到列表框中。没有错误消息:

lstDiff.RowSource = "select TestScenario,TestId from tblTesting where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'"

有人可以帮忙吗?

【问题讨论】:

    标签: sql ms-access vba syntax


    【解决方案1】:

    您在字段中的值是数字,因此不需要额外的单引号。代码应如下所示:

    Me.lstDiff.RowSource = "select TestScenario,TestId from tblTesting where empid= " & Me.txtEmpId & " and testid= " & Me.txtAutoNumber & ";"
    

    我还从字段引用中删除了 .Value,它们无害,但也没有必要。

    我已经在你的语句末尾添加了一个分号。

    根据您插入此代码的时间/位置,您可能还需要添加以下语句:

    Me.lstDiff.Requery
    

    【讨论】:

      【解决方案2】:

      您不断发布关于完全相同的 WHERE 子句的问题,每个子句中都有完全相同的明显错误。 SO 用户尽职尽责地指出您的错误,然后几天后,您使用相同的错误 WHERE 子句出现了一个相关问题。

      DLookup Problem:

        txtContSunStart1.Value = DLookup("Start1", "tblContract", _
           "TestId = " & _
           lstResults.Value & _
           "" And "Day = 'Sunday'")
      

      VBA Update Query:

        DoCmd.RunSQL (" Update tbltesting set IsDiff ='Yes' where empid= " & Me.txtEmpId.Value & " and testid= " & Me.txtAutoNumber.Value & ";")
      

      VBA SQL Problem

        DoCmd.RunSQL ("insert into tbltesting (IsDiff)values ('Yes') where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'")
      

      然后在当前问题中:

        lstDiff.RowSource = "select TestScenario,TestId from tblTesting where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'"
      

      您反复遇到完全相同的问题。

      以下是在 Access 中使用正确分隔符连接 SQL 字符串的规则:

      1. 数值不需要分隔符:

        "... AND testid=" & Me!txtAutoNumber

      2. 文本值需要引号分隔符。在 Access 中,通常使用双引号,但使用单引号要容易得多,因为以可行的形式键入双引号很痛苦(根据上下文键入 """ 或 """" 是违反直觉和愚蠢的我,所以我总是定义一个包含双引号符号并与之连接的全局常量。

        "... AND textfield=" & Chr(34) & Me!MyTextField & Chr(34)

      3. 日期值使用 # 分隔符:

        "... AND datefield=#" & Me!MyDateField & "#"

      4. 布尔字段不需要引号,最好使用 True 和 False:

        "... AND IsDiff=True"

      这些规则适用于 WHERE 子句条件和 UPDATE 查询中的 SET 语句。这些规则适用于编写传递给 DoCmd.RunSQL 或 CurrentDB.Execute 的 SQL 字符串,以及编写用作表单或报表的记录源或组合框或列表框的行源的 SQL 字符串。

      【讨论】:

        【解决方案3】:

        就个人而言,每当我在代码中使用 SQL 语句时,我更喜欢将语句存储在一个变量中。测试时,在将语句分配给变量后的行中,您可以使用 Debug.Print 查看解析 txtempid 和 txtautonumber 后 SQL 语句的样子。它看起来像这样。

        Dim sSQL as String
        sSQL = "select TestScenario,TestId from tblTesting where empid= '" & Me.txtEmpId.Value & "' and testid= '" & Me.txtAutoNumber.Value & "'"
        Debug.Print sSQL
        lstDiff.RowSource = sSQL
        

        然后,只要您的即时窗口是可见的 (Ctrl-G),您就可以看到您的 SQL 语句到底是什么。如果它在即时窗口中看起来正确,请将其复制并粘贴到查询构建器中并在那里运行。

        【讨论】:

          【解决方案4】:

          尝试在 SQL Management Studio 中运行查询。有没有返回任何行?

          编辑:刚刚注意到访问标签。您确定您的表格中至少包含一个带有所提供 ID 的帖子吗?

          【讨论】:

          • 是的,下面的查询结果是一行:SELECT TestScenario, TestId FROM tblTesting WHERE empid=22222222 And testid=131;
          • 自从我使用 VBA 以来已经有好几年了。但是,你能用 MsgBox()“警告”结果吗?使用列表框以外的其他对象。您是否选择了正确的数据库?
          【解决方案5】:

          我的 Access 有点生疏,但如果所有其他方法都失败了,请尝试使用记录集从 SQL 中捕获数据并循环遍历它,将值添加到列表框中。 Example Code

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-24
            • 2013-08-27
            • 2018-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多