IsNull(rst.FIelds("field").Value) 给出错误 '3021' 没有当前记录
Posted
技术标签:
【中文标题】IsNull(rst.FIelds("field").Value) 给出错误 \'3021\' 没有当前记录【英文标题】:IsNull(rst.FIelds("field").Value) Giving Error '3021' No Current RecordIsNull(rst.FIelds("field").Value) 给出错误 '3021' 没有当前记录 【发布时间】:2021-02-12 01:41:35 【问题描述】:大家早上好!我被困住了,如果我能得到任何帮助,我将不胜感激。
我的子程序的一部分从记录集中获取一个值。如果记录集所基于的查询没有返回值,那么我会收到错误消息:
'3021' 没有当前记录
我正在尝试检查空记录并将我的 vba 代码重定向到其他地方以避免此错误,但我无法这样做。到目前为止我看到的所有参考都说要做同样的事情,这是我尝试过的
IsNull(rst.FIelds("field").Value)
仍然无法正常工作。我不知道从哪里开始。
代码如下。
目前,出于调试目的,我已硬编码值 27 和 Schematic,但请注意,在实际子例程中,这些将是变量。
非常感谢您的所有帮助!祝你有美好的一天:)
Dim dbs As DAO.Database
Dim rst_Trim As DAO.Recordset
Set dbs = CurrentDb
qrystring = "SELECT tblDocuments.Trim FROM tblDocuments WHERE (tblDocuments.ID = 27 AND tblDocuments.type = 'Schematic')"
Set rst_Trim = dbs.OpenRecordset(qrystring, dbOpenSnapshot)
If IsNull(rst_Trim.Fields("trim").Value) Then
'do stuff
MsgBox "null"
Else
trimNumber = rst_Trim.Fields("trim").Value
'do stuff
MsgBox trimNumber
End If
【问题讨论】:
测试记录集是否为空:If Not rst_Trim.EOF Then
。可以简化字段引用:rst_Trim("trim")
或rst_Trim!trim
。
但是,我只是在记录集为空时测试了 IsNull() 并且它可以工作。啊,它适用于我的简化字段参考,但不适用于您的。
【参考方案1】:
正如您所期望的只有一个或“a”值,DLookup 可以做到:
Dim TrimValue As Variant
TrimValue = DLookup("[Trim]", "[tblDocuments]", "[ID] = 27 And [Type] = 'Schematic'")
If IsNull(TrimValue) Then
' Do stuff.
MsgBox "null"
Else
trimNumber = TrimValue
' Do stuff.
MsgBox trimNumber
End If
【讨论】:
【参考方案2】:不喜欢在记录集为空时使用.Value
属性。值是默认属性,不需要引用。只需将其从您的代码中删除即可。
否则,另一种测试记录集是否有记录的方法:
If rs.EOF Then
MsgBox "No records"
Else
'do something
End If
【讨论】:
以上是关于IsNull(rst.FIelds("field").Value) 给出错误 '3021' 没有当前记录的主要内容,如果未能解决你的问题,请参考以下文章
带有 Pandas DataFrame 的“df.isnull().any().any()”的更惯用版本? [复制]