| |
|
|
| | Который день уже бьюсь с такой проблемой: имеется одна .mdb с таблицами и две .mdb с оболочкой. Из одной .mdb меняю содержимое таблиц. После изменения вывешиваю флаг (тоже поле в отдельной таблице), по которому во второй оболочке делается .requery в формах. Очень часто бывает, что после requery в формах остаются старые данные. Если сделать принудительно по shift-F9, то все нормально. Такое впечатление, что проблема на уровне Jet, так как пробовал и через DAO и через ADO. | |
| |
| |
| |
|
|
| | forms![имя формы].recordsource=forms![имя формы].recordsource | |
| |
| |
| |
|
|
| | К сожалению не помогло. Я предпологаю, что причина в том, что таблицы меняются в составе транзакции и фактическое их изменение происходит уже после обновления флага. Попробую изменение флага воткнуть внутрь транзакции... | |
| |
| |
| |
|
|
| | Перенес изменение флага внутрь транзакции после update таблиц. Ничего не изменилось:
requery через раз возвращает старые данные. Пересоединение с RecordSource - тот же результат. | |
| |
| |
| |
|
|
| | А как Вы отлавливаете смену флага - "кто" этим занимается в Вашей программе - как реализовано обновление - приоткрытии формы или ещё как - может по таймеру? | |
| |
| |
| |
|
|
| | По таймеру в одной из форм, открытой постоянно. Я уже разобрался: ядро Jet по-умолчанию кэширует данные, в том числе и на запись, в памяти. Можно это запретить принудительно, но тогда сильно замедляется работа, особенно с ракордсетами dbOpenDynaset. Помогла
команда DBEngine.Idle dbRefreshCache перед Requery. Она заставляет ядро скинуть все буферы записи в .mdb . До переделки Requery делалось раз в две секунды для всех открытых форм, при накоплении более 30000 записей в одной из таблиц начинался ступор, так как Requery всех форм занимало более этих 2 секунд. Теперь формы обновляются только по флагу, и запаздывание менее пол-секунды, что и требовалось. | |
| |
| |