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)

仍然无法正常工作。我不知道从哪里开始。

代码如下。

目前,出于调试目的,我已硬编码值 27Schematic,但请注意,在实际子例程中,这些将是变量。

非常感谢您的所有帮助!祝你有美好的一天:)

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' 没有当前记录的主要内容,如果未能解决你的问题,请参考以下文章

NULLIF与ISNULL的交叉使用

采坑 - 字符串的 "" 与 pd.isnull()

Automapper“IsNull”目标后缀无法正常工作

带有 Pandas DataFrame 的“df.isnull().any().any()”的更惯用版本? [复制]

在ibatis中在sql语句判断的时候isEqual和isNull的区别是啥地方

empty() isset() isnull() 比较