这是我的代码:
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
附近放括号;在.Value
和H2OBillingIDNum
结束时Me.txtHotelID
交替并合并;以字符串形式输入数据,在这种情况下,我得到数据不匹配错误。
我不相信我可以使用SQL查询,因为它是一个文本输入字段,但如果我错了,我会很乐意接受这些信息,因为我从来没有听说过像这样的SQL查询,它是一种更快,更准确的数据提取方法。
我没有想法。有什么建议?是新西兰吗?有没有更好的写作方式?这应该不包括在内吗?如果有帮助,这是一个DAO db。
答案 0 :(得分:0)
您可以将其缩小为:
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
的{{1}}时,它没有多大意义,所以它可能应该是:
Me!txtHotelID.Value
答案 1 :(得分:0)
错误必须是Me.txtHotelID
为空,因此DLookup
来电不完整
DLookup("foo", "bar", "myValue = ")
给出Runtime error 3075: Syntax error (missing operator) in 'myValue = '
以下是如何调试此类问题的指南。
将代码分开(每行一个命令),并使用中间变量。通过将鼠标悬停在变量名称或Watch窗口中,可以在中断模式下看到它们的值。
推荐阅读: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
答案 2 :(得分:-1)
抱歉误导了你 我没有真正看到目的,但有一件事是肯定的 - 如果你的Dlookup返回Null你会得到蚂蚁错误。您无法使用null加载标题。 需要一个围绕Dlookup的新西兰人。但我不知道Dlookup是否有可能找不到任何东西