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

use*_*085 0 ms-access vba access-vba

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
Run Code Online (Sandbox Code Playgroud)

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

Han*_*sUp 6

"我收到运行时错误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
Run Code Online (Sandbox Code Playgroud)

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

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

idfunc & "' AND [ID - Tarefa] LIKE ' " & idtask & "' );"
                                    ^ here
Run Code Online (Sandbox Code Playgroud)