Мне нужна помощь в отладке проблемы SQL / access/VBA
Я унаследовал базу данных ACCESS от кого-то, кто с тех пор покинул компанию. Он имеет большую форму,которая имеет множество выпадающих и текстовых элементов управления. После их заполнения пользователь нажимает кнопку, чтобы обновить запись во внешнюю базу данных.
Это прекрасно работало до трех недель назад, но теперь создает периодические ошибки для большинства пользователей. Проблема в том, что последние два поля в форме не всегда обновляются. Когда это происходит, код генерирует сообщение об ошибке 3164: "поле не может быть обновлено", и запись не обновляется. В настоящее время существует около 1000 записей, которые не были обновлены правильно.
Существует оператор SQL SELECT, который используется в наборе записей, который затем становится местом хранения всех значений элементов управления в форме. Каждый из элементов управления имеет тег, в котором хранится имя поля (в наборе записей), которое должно быть обновлено значением элемента управления. Таким образом, существует петля, похожая на:
rs.Edit For Each ctl In Me.Controls rs(ctl.Tag).value = ctl.value Next rs.Update
(Существует некоторая проверка, чтобы убедиться, что мы используем только правильный тип элементов управления, что поле, идентифицируемое значением тега, на самом деле находится в наборе записей (rs), и что мы не обновляли эту запись раньше точно такими же значениями, но я оставил все это для ясности)
Я отладил модуль, где это происходит, и ошибка находится в строке rs(ctl.Tag).value = ctl.value. Код находится в функции, которая определяется как " Public Sub UpdateFields(ByVal rs As Recordset)"
Вызывающий модуль создал набор записей следующим образом:
UpdateFields getRecNumSaveRS(txtRecNum)
(где getRecNumSaveRS - это имя функции, создающей набор записей на основе номера записи, переданного в качестве параметра)
Я изменил код, чтобы :
Dim rs As Recordset . . . Set rs = getRecNumSaveRS(txtRecNum) UpdateFields rs rs.Close Set rs = Nothing
.. потому что я знал, что не закрытие и удаление набора записей может привести к ошибкам, но это, похоже, не помогло.
В нашей группе нет других людей с ИТ-опытом, поэтому у меня нет никакой помощи. Если кто-нибудь может предложить какую-либо помощь, я могу проверить здесь, или вы можете написать мне по электронной почте на ian-dot-n-dot-dennis-at-healthnet-dot-com
Что я уже пробовал:
1) гуглить везде
2) Добавление точек останова для поиска места выхода ошибок кода (это происходит до обновления rs.)
3) Добавление rs. Close и установка rs = Nothing
4) Добавление таймеров для повторного запуска строки rs (ctl. Tag). value = ctl. value (снова удалено, потому что они не помогли)
5) проверка того, что используется правильная версия приложения
Ничего не работает (беда в том, что он работает в основном на моей машине и его трудно эмулировать)
CHill60
Я запутал ваш адрес электронной почты, чтобы спам-боты не подхватили его. Никогда не стоит размещать свою электронную почту на открытых форумах в интернете