VBA选择不返回任何行

Posted

技术标签:

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

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

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

有人可以帮忙吗?

【问题讨论】:

【参考方案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 字符串的规则:

    数值不需要分隔符:

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

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

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

    日期值使用 # 分隔符:

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

    布尔字段不需要引号,最好使用 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

【讨论】:

以上是关于VBA选择不返回任何行的主要内容,如果未能解决你的问题,请参考以下文章

如果 Range 包含任何值,VBA 返回 1 - 不工作

VBA Outlook SendUsingAccount 不返回任何内容

MS Project VBA - 当过滤器不返回任何内容时如何避免错误

在 VBA 中访问选择组合框列返回“函数未定义”-错误

VBA - 在 msgbox 之后返回用户窗体

如何插入选择查询的结果(如果不返回任何行则默认)作为 Postgres 函数的一部分?