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