无法理解recordset.FindFirst函数的语法

时间:2015-07-31 19:08:35

标签: vba ms-access access-vba

经过数小时的研究,我仍然无法理解我的语法有什么问题。

rs.FindFirst "[Date] =" & Date() & " AND [Employee] = " & [Forms]![Machinist Timesheet]![Frame4]

它只是给我一个运行时错误的语法。

许多解决方案涉及大量定界撇号或引号,但我不明白为什么它们是必要的。

1 个答案:

答案 0 :(得分:2)

FindFirst 方法实质上是在没有“WHERE”的情况下要求SQL查询的“WHERE”部分。

数据库中的字段是某些数据类型,必须在SQL中表示。

  • 日期:#1/31/2015#
  • 字符串:'单引号' - 或 - “双引号”
  • 数字: 4,5.5,7 / 8(无需加标)
  • 字段: [FieldName]

尝试编写如下代码:

rs.FindFirst "[Date] = #" & Format(Date(), "m/d/yyyy") & "# AND [Employee] = " _
    & [Forms]![Machinist Timesheet]![Frame4]

这将使用标准SQL片段,如下所示:

[Date] = #7/31/2015# AND [Employee] = 5

如果Employee字段不是数字,则应该有引号,如下所示:

rs.FindFirst "[Date] = #" & Format(Date(), "m/d/yyyy") & "# AND [Employee] = '" _
    & [Forms]![Machinist Timesheet]![Frame4] & "'"

对于标准SQL片段:

[Date] = #7/31/2015# AND [Employee] = '698-48-1247'

您可能希望像这样编写例程,然后检查sCriteria的值,以便正确格式化。如果您不确定格式是否正确,请将其复制并在“WHERE”之后将其粘贴到SQL视图中的查询中

Dim sCriteria As String

sCriteria = "[Date] = #" & Format(Date(), "m/d/yyyy") & "# AND [Employee] = " & _
    [Forms]![Machinist Timesheet]![Frame4]

Debug.Print sCriteria

rs.FindFirst sCriteria

<强>参考