-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


При обновлении формы методом Requery объект RecordSet уничтожается.

Вторник, 18 Апреля 2017 г. 09:20 + в цитатник
Доброго дня.
Есть две таблицы ReportVariants и ReportSheets, связь один ко многим по ключевому полю первой таблицы ReportVariants.ID. Включено встроенное обеспечение целостности с каскадным изменением/удалением. На главной форме ReportSettings есть две подчиненные формы, соответствующие этим таблицам. Запрос на выборку данных из второй таблицы ReportSheets отображает только записи соответствующие активной записи в таблице ReportVariants.
SELECT ReportSheets.Name, ReportSheets.ReportID, ReportSheets.ID
FROM ReportSheets
WHERE (((ReportSheets.ReportID)=[ReportVariants].[Form].[ID]));

Для обновления второй формы ReportSheets при изменении положения курсора для формы ReportVariants на событие ReportVariants.Form.OnCurrent установлен макрос

Private Sub Form_Current()
    Parent.ReportSheets.Requery
End Sub


Картинка с другого сайта.

Неприятность происходит при интерактивном удалении строки из первой подчиненной формы ReportVariants.

Картинка с другого сайта.

Вне зависимости от согласия пользователя с удалением, событие ReportVariants.Form.OnCurrent срабатывает дважды, и при втором вызове объект ReportSheets.Form.RecordSet становится равным Nothing.

Картинка с другого сайта.

Все, после этого вторая подчиненная форма ReportSheets не обновится, пока форма не будет прееоткрыта, поскольку источник данных уничтожен. Как с этим бороться?

Используется Access 2010 x64. Раньше Access никогда не использовал, сейчас вынужден прибегнуть именно к нему. В процессе попыток быстро пришел к выводу, что чем меньше пользоваться встроенными возможностями Access, используя обработку событий вручную на VBA, тем стабильнее будет результат. Возможно я ошибаюсь. В данном случае, для меня проще всего запретить интерактивное удаление строк и сделать то же самое запросом из макроса. Но хотелось бы узнать у специалистов, я что-то не так сделал, или это просто такой баг у самого Access. Полагаю с этим уже сто раз столкнулись, но я не нашел.

База с только описанными объектами прилагается. Достаточно открыть форму ReportVariants и попробовать интерактивно удалить строку из первой таблицы.

Спасибо за помощь.

http://www.sql.ru/forum/1257450/pri-obnovlenii-formy-metodom-requery-obekt-recordset-unichtozhaetsya


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку