VBA Recordset - 对象不支持此属性或方法

时间:2014-09-01 14:12:58

标签: vba ms-access

任何人都可以解释这段代码有什么问题吗?存在运行时错误,指出对象不支持此属性或方法

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已在其他地方使用并且正常工作。我想错误是返回记录集对象的结果?

2 个答案:

答案 0 :(得分:1)

怀疑my question comment,您的函数DataFunctions.CheckCompanyID不会返回记录集对象,而是NothingNothing是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