VBA选择不返回任何行

时间:2009-07-23 10:06:30

标签: sql ms-access vba syntax

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

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

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:2)

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

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

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

我在你的陈述结尾添加了一个分号。

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

Me.lstDiff.Requery

答案 1 :(得分:1)

您不断发布有关完全相同的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 =”&我!txtAutoNumber

  2. 文本值需要引用分隔符。在Access中,通常的做法是使用双引号,但更容易使用单引号,因为在一个可以工作的形式中键入双引号是很痛苦的(根据上下文键入“”“或”“”“是违反直觉和愚蠢的我,所以我总是定义一个全局常量,它保​​存双引号符号并与之连接。

    “... AND textfield =”& Chr(34)&我!MyTextField& CHR(34)

  3. 日期值使用#delimiter:

    “......和datefield =#”&我!MyDateField& “#”

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

    “......和IsDiff = True”

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

答案 2 :(得分:0)

尝试在SQL Management Studio中运行查询。你得到任何一行吗?

编辑:刚刚注意到了access-tag。您确定您的表格中至少包含一个提供了ID的帖子吗?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

就个人而言,每当我在代码中使用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语句究竟是什么。如果它在即时窗口中看起来正确,请将其复制并粘贴到查询构建器中并在那里运行它。