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选择不返回任何行的主要内容,如果未能解决你的问题,请参考以下文章
VBA Outlook SendUsingAccount 不返回任何内容