Удалить 5 записей, но свойство RecordsAffected равно 0

Вот фрагмент кода:

Private Sub frmSearch_UnMarkAll()
Const sqlD As String = "DELETE * FROM PickList WHERE TableName = ""CARS"" AND KeyNo IN (" & _
"SELECT RecNo FROM Cars "
If frmSearch.WhereSql <> vbNullString Then
    CurrentDb.Execute sqlD & frmSearch.WhereSql & ")"
End If
Stop
End Sub

Эта функция вызывается нажатием командной кнопки в форме frmSearch. Кнопка вызывает событие, которое обрабатывается приведенным выше кодом. WhereSql — это предложение where из списка, отображаемого на экране поиска. Он имеет такое значение, как «WHERE Cars.RecNo > 1441». Когда код достиг оператора Stop, я проверил свойство RecordsAffected, используя непосредственное окно и набрав:

? Currentdb.RecordsAffected 
 0 is the result.

Я проверил таблицу PickList, и соответствующие элементы были удалены.

Мой вопрос: это ошибка? Или это нормально, что удаление записи не влияет на нее?

Я обошёл проблему. Я удалил поле SequenceNo из таблицы PickList. Я создал и проиндексировал TableName и KeyNo в таблице PickList и указал значение Unique как yes. Теперь я просто

INSERT INTO PickList (TableName,LastChangedDate,KeyNo)
Values(tablename,now(),recno из названной таблицы)

Если INSERT не выполняется из-за ошибки 3022, это попытка дублирования записи, которую я игнорирую в этом примере. Все остальное работает так, как я хотел, чтобы функционировало в первую очередь. Свойство RecordsAffected всегда равно нулю, когда я проверяю его в своем коде или просматриваю, печатая в отладчике. Это все еще вызывает недоумение, потому что, если вы запускаете запросы действий из доступа в интерактивном режиме, вся эта информация представлена. Если вы запускаете другие реляционные СУБД (те, которые являются стандартными), всегда есть обратная связь, когда вы используете механизм запросов. Мне трудно поверить, что другие не терпят неудачу, если это ошибка в доступе. Я склонен думать, что я как-то облажался. Надеюсь, я не единственный первопроходец. Заранее спасибо за просмотр.


person Perry Sugerman    schedule 13.04.2016    source источник


Ответы (1)


См. ответ здесь для объяснения того, что происходит не так. По сути, вы не ссылаетесь на один и тот же объект при получении свойства RecordsAffected. Вам нужно установить явную ссылку и использовать в обоих случаях. Что-то вроде:

dim db as dao.database
set db=currentdb
db.execute "some SQL statement", dbfailonerror
debug.print db.recordsaffected
person Lord Peter    schedule 14.04.2016