2016-04-13 1 views
3

Вот фрагмент кода:Удалить 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» Когда код достиг заявление Стоп, я проверил свойство RecordsAffected с помощью немедленного окна и набрав:

? Currentdb.RecordsAffected 
0 is the result. 

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

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

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

INSERT INTO PickList (TableName, LastChangedDate, KeyNo)
значения (TABLENAME, сейчас(), RECNO из tablenamed)

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

ответ

3

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

dim db as dao.database 
set db=currentdb 
db.execute "some SQL statement", dbfailonerror 
debug.print db.recordsaffected 
Смежные вопросы