运行时错误 3021 - EOF 或 BOF 为真或当前记录已被删除

Posted

技术标签:

【中文标题】运行时错误 3021 - EOF 或 BOF 为真或当前记录已被删除【英文标题】:Run time error 3021 - EOF or BOF is true or the current record has been deleted 【发布时间】:2013-12-11 23:41:46 【问题描述】:
rst.Open "SELECT * FROM Equipas WHERE ([ID - Funcionário] LIKE '" & idfunc & "' AND [ID - Tarefa] LIKE ' " & idtask & "' );", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rst.Delete adAffectCurrent
rst.Update
rst.Close

我收到运行时错误 3021 但查询不为空。

【问题讨论】:

尝试在 SQL 末尾删除;。如果这仍然不起作用,请尝试打印出生成的 SQL 并直接在 Access 中运行。 重复问题中的问题是LIKE 通配符。虽然这个问题也使用LIKE,但没有迹象表明涉及通配符。 【参考方案1】:

“我收到运行时错误 3021 但查询不为空。”

仔细检查该点。

Dim strSelect As String
strSelect = "SELECT * FROM Equipas " & _
    "WHERE ([ID - Funcionário] LIKE '" & _
    idfunc & "' AND [ID - Tarefa] LIKE ' " & idtask & "' );"
Debug.Print strSelect
rst.Open strSelect, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
If rs.BOF And rs.EOF Then
    MsgBox "recordset is empty"
Else
    rs.MoveLast
    MsgBox "recordset contains " & rs.RecordCount & " rows"
End If
'rst.Delete adAffectCurrent
'rst.Update
rst.Close

如果该版本的代码告诉您“记录集为空”,请转到立即窗口 (Ctrl+g) 进行检查SELECT 语句构建的代码。您可以复制语句文本并将其粘贴到新 Access 查询的 SQL 视图中进行测试。

我最好的猜测是查询不返回任何行,因为它在 idtask 的值之前包含一个空格,并且没有 [ID - Tarefa] 值匹配空格加上 idtask

idfunc & "' AND [ID - Tarefa] LIKE ' " & idtask & "' );"
                                    ^ here

【讨论】:

以上是关于运行时错误 3021 - EOF 或 BOF 为真或当前记录已被删除的主要内容,如果未能解决你的问题,请参考以下文章

asp.net(C#)如何 判断是不是到数据库的第一条或者是最后一条(也就是EOF或BOF)

为啥极少数情况下 bof/eof 之一对于新的非空记录集是正确的

如何在vb.net中使用.eof OR .bof条件?

如何在uft中实现框架的错误处理功能

错误:不支持的格式,或损坏的文件:预期的 BOF 记录

MS ACCESS VBA 运行时错误'3021';使用 .MoveNext