DLookup 3075 新西兰附近缺少运营商?

DLookup 3075 Missing Operator Around NZ?

这是我的代码:

Private Sub Form_Current()

Set rs = CurrentDb.OpenRecordset("Sites", dbOpenDynaset, dbSeeChanges)
rs.Requery
rs.MoveFirst
   If Nz(Me.Site_ID.Value) > 0 Then
      Me.H2OBillingIDlbl.Caption = DLookup("H2OBillingIDNum", "Sites", "H2OBillingIDNum = " & Me.txtHotelID)
   Else
      Me.H2OBillingIDlbl.Caption = ""
   End If

End Sub

DLookup 行抛出错误。

Me.txtHotelID 框是表单上的文本输入框,仅用于输入数字。

记录集中的H2OBillingIDNum字段为Long。

我试过把 H2OBillingIDNum 括起来; H2OBillingIDNumMe.txtHotelID末尾的.Value交替组合;将数据作为字符串输入,在这种情况下我会收到数据不匹配错误。

我不相信我可以使用 SQL 查询,因为它是一个文本输入字段,但如果我错了,我会很乐意接受这些信息,因为我从未听说过SQL 这样的查询,这是一种更快、更准确的提取数据的方法。

我没主意了。有什么建议么?是新西兰吗?有更好的写法吗?根本不应该包括在内吗?如果有帮助,这是一个 DAO 数据库。

抱歉误会你了 我真的不明白目的,但有一件事是肯定的 - 如果你的 Dlookup returns a Null 你会得到 ant 错误。您不能加载带有 null 的标题。 需要围绕 Dlookup 的 NZ。但我不知道是否有可能 Dlookup 没有找到任何东西

您可以将其缩减为:

Private Sub Form_Current()

    Dim rs As DAO.Recordset
    Dim SQL As String
    Dim Caption As String

    If Nz(Me!Site_ID.Value, 0) > 0 Then
        SQL = "Select Top 1 H2OBillingIDNum From Sites Where H2OBillingIDNum = " & Nz(Me!txtHotelID.Value, 0) & ""
        Set rs = CurrentDb.OpenRecordset("SQL", dbOpenDynaset, dbSeeChanges)
        Caption = rs!Fields(0).Value
    End If
    Me!H2OBillingIDlbl.Caption = Caption

    Set rs = Nothing

End Sub

如您所见,它没有多大意义,因为您查找 H2OBillingIDNum,您已经拥有 Me!txtHotelID.Value,所以它可能应该是:

SQL = "Select Top 1 SomeTextField From Sites Where H2OBillingIDNum = ...

错误一定是 Me.txtHotelID 为空,因此您的 DLookup 调用不完整

DLookup("foo", "bar", "myValue = ")

给出 Runtime error 3075: Syntax error (missing operator) in 'myValue = '

这是关于如何调试此类问题的指南。

拆开代码(每行一个命令),并使用中间变量。通过将鼠标悬停在变量名称上或在 Watch window.

中,可以在中断模式下查看它们的值

推荐阅读:Debugging VBA Code

如果您使用DLookup,则根本不需要记录集,所以我已将其删除。

运行(或逐步执行)这段代码,错误将变得清晰:

Private Sub Form_Current()

    Dim SiteID As Long
    Dim HotelID As Long
    Dim strCaption As String

    SiteID = Nz(Me.Site_ID.Value, 0)
    If SiteID > 0 Then
        ' Intentionally without Nz(), will throw error
        HotelID = Me.txtHotelID
        ' Nz() will be needed here too!
        strCaption = DLookup("H2OBillingIDNum", "Sites", "H2OBillingIDNum = " & HotelID)
    Else
        strCaption = ""
    End If
    Me.H2OBillingIDlbl.Caption = strCaption

End Sub