Ошибка 2501 при попытке удалить запись - PullRequest
0 голосов
/ 10 января 2011

У меня есть внешний интерфейс базы данных Access, и я пытаюсь поместить в форму кнопку, чтобы удалить текущую запись.Я использовал следующий код VBA для удаления записи:

If Me.NewRecord Then
    Me.Undo
    Exit Sub
End If

DoCmd.RunCommand acCmdDeleteRecord

Me.Requery
Me.Refresh

Когда я запускаю это для записей, которые я вставил в базу данных с формой, он возвращает Ошибка времени выполнения '2501' на DoCmd.Однако, если я запустил его для записи, которая уже существовала в базе данных, то код завершается, как и предполагалось.

Кроме того, никто больше не обращается к этой таблице базы данных, и у меня была только одна открытая форма.1008 *

Когда я пошел, чтобы удалить их из связанной таблицы вручную при доступе, я получил ту же ошибку, но я смог удалить их из базы данных с помощью SQL Server Management Studio.

Что может вызвать этослучилось?

РЕДАКТИРОВАТЬ

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

1 Ответ

1 голос
/ 12 января 2011

Помимо рекомендации иметь поле временной метки в таблице (помощник SSMA добавляет это во все таблицы, когда вы используете его для увеличения размера из Access, и это определенно то, что я бы рекомендовал), у меня есть некоторая критика вашего кода.Я бы написал так:

  If Me.NewRecord Then
     Me.Undo
  Else
     DoCmd.RunCommand acCmdDeleteRecord
     Me.Requery
  End If

Обновление избыточно после запроса, так как у вас уже есть самые последние данные.

Использование Exit Sub полезно для защитных предложений о вещахкоторые не являются взаимоисключающими, но в этом случае у вас есть либо / или - либо вы собираетесь удалить существующую запись, либо отменить новую запись.Это может быть обработано в одном блоке If / Then / Else, и тогда у вас есть единственная точка выхода для вашей подпрограммы, что очень полезно в случае, если код станет более сложным в будущем.

...