2013-08-06 3 views
1

Когда я использую приведенный ниже код, иногда я получаю сообщение об ошибке 3021. Это происходит только тогда, когда у меня есть одна запись в наборе записей. Не могли бы вы рассказать мне, почему и как это исправить? Кажется, я все пробовал!Ошибка 3021 при удалении элемента из набора записей

Благодаря

Private Sub cmdDelSelectedAction_Click() 

response = MsgBox("Are you sure?", vbYesNo, "Confirmation required") 
If response = vbNo Then Exit Sub 

If Me.[Arrangement-Actions subform].Form.Recordset.EOF Then 
    Me.[Arrangement-Actions subform].Form.Recordset.MovePrevious 
End If 

If Me.[Arrangement-Actions subform].Form.Recordset.BOF Then 
    Me.[Arrangement-Actions subform].Form.Recordset.MoveNext 
End If 

Me.[Arrangement-Actions subform].Form.Recordset.Delete 
Me.[Arrangement-Actions subform].Form.Recordset.MoveNext 

End Sub 
+3

Если у вас есть одна запись, и вы ее удаляете, как должен работать вызов MoveNext? – LarsTech

+0

Какая строка подсвечивается при получении ошибки? – PowerUser

+0

LarsTech - Возможно, я ошибся здесь. Я получил сообщение об ошибке, прежде чем добавить вызов .MoveNext. PowerUser - это ошибки на строке RecordSet.Delete – edbyford

ответ

0

Это было некоторое время, но я думаю, что код будет выглядеть следующим образом:

Private Sub cmdDelSelectedAction_Click() 
    Dim rec As Recordset = Me.[Arrangement-Actions subform].Form.Recordset 
    If Not rec.BOF Or Not rec.EOF Then 
    If MsgBox("Are you sure?", vbYesNo, "Confirm") = vbYes Then 
     rec.Delete 
    End If 
    End If 
End Sub 

Я нахожу это немного странным, что в вашем коде вы бы попросить, чтобы подтвердить удалите запись, а затем перед удалением записи вы должны выполнить MoveNext или MovePrevious в наборе записей. Я бы держался подальше от этого, поскольку конечный пользователь может удалить другую запись, чем ожидали.

Смежные вопросы