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
括起来; H2OBillingIDNum
和Me.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
这是我的代码:
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
括起来; H2OBillingIDNum
和Me.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