任何人都可以解释这段代码有什么问题吗?存在运行时错误,指出对象不支持此属性或方法
Set rst = DataFunctions.CheckCompanyID
If IsNull(rst.Fields("ID")) Then 'Error occurs here
ContactID = 0
Else
ContactID = rst!ID
End If
CheckCompanyID
方法执行如下操作
CompanyValue = GetCurrentRecord
CheckData = "Select CompanyID, ID From Contacts Where Contacts.CompanyID = " & CompanyID & ";"
CheckCompanyID = CurrentDB.OpenRecordset(CheckData, dbOpenDynaset) 'Returns The Recordset
If Is Null(rat.Fields("*FieldName*")) Then
已在其他地方使用并且正常工作。我想错误是返回记录集对象的结果?
答案 0 :(得分:1)
怀疑my question comment,您的函数DataFunctions.CheckCompanyID
不会返回记录集对象,而是Nothing
。 Nothing
是VB' null
。
如果函数内部存在未处理的错误并且On Error Resume Next
生效,或者仅仅因为函数以这种方式实现,就会发生这种情况。
作为一般提示:您不应该使用对象引用而不检查它们是否有效(即不是Nothing
)以避免像这样的运行时错误。
您可以轻松查看Nothing
:
Set rst = DataFunctions.CheckCompanyID
ContactID = 0
If Not rst Is Nothing
If IsNull(rst.Fields("ID")) Then
ContactID = rst!ID
End If
End If
注意:Classic VB不支持短路逻辑表达式,因此不能使用其他语言允许的单行表单:
If Not rst Is Nothing And Not IsNull(rst.Fields("ID")) Then
' This will cause an error because rst.Fields("ID") is always evaluated!
End If
答案 1 :(得分:0)
检查你的第一个,如果它得到一个带有结果的记录集。 试试这个:
IF nz(rst("ID"), "") = "" then
代替
If IsNull(rst.Fields("ID")) Then