VBA记录集-对象不';不支持此属性或方法

VBA记录集-对象不';不支持此属性或方法,vba,ms-access,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

有人能解释一下这个代码的错误吗?出现运行时错误,指出对象不支持此属性或方法

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

如果为空(rat.Fields(“*FieldName*”),则
已在其他地方使用并正常工作。我猜想这个错误是返回记录集对象的结果?

如果rst得到返回结果的记录集,请检查rst。 试试这个:

IF nz(rst("ID"), "") = "" then 
反而

If IsNull(rst.Fields("ID")) Then 
在中,您的函数
DataFunctions.CheckCompanyID
不返回记录集对象,而是
Nothing
Nothing
是VB的
null

如果函数中存在未处理的错误,并且“错误恢复下一步”中的
生效,或者仅仅因为函数是以这种方式实现的,则可能发生这种情况

作为一般提示:在未检查对象引用是否有效(即not
Nothing
)的情况下,不应使用对象引用,以避免此类运行时错误

您可以轻松地检查
无任何内容

Set rst=DataFunctions.CheckCompanyID
ContactID=0
如果不是,那就什么都不是了
如果为空(rst.Fields(“ID”)),则
联系人ID=rst!身份证件
如果结束
如果结束

注意:Classic VB不支持短路逻辑表达式,因此您不能使用其他语言允许的单线形式:

如果不是rst为Nothing且不是NULL(rst.Fields(“ID”)),则
'这将导致错误,因为始终计算rst.Fields(“ID”)!
如果结束

在方法
CheckCompanyID
中是否使用
一个错误继续下一个
最可能的情况是:
数据函数。CheckCompanyID
返回
无任何内容
,而您不进行检查。您在不使用
设置的情况下分配
CheckCompanyID
。将
为null(rst.Fields(“ID”))
不检查记录集字段是否为null或空?
如果不是,则rst为Nothing…