Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с .Requery в Access 2003
 
 автор: Zyec   (25.04.2010 в 05:10)   личное сообщение
 
 

Который день уже бьюсь с такой проблемой: имеется одна .mdb с таблицами и две .mdb с оболочкой. Из одной .mdb меняю содержимое таблиц. После изменения вывешиваю флаг (тоже поле в отдельной таблице), по которому во второй оболочке делается .requery в формах. Очень часто бывает, что после requery в формах остаются старые данные. Если сделать принудительно по shift-F9, то все нормально. Такое впечатление, что проблема на уровне Jet, так как пробовал и через DAO и через ADO.

  Ответить  
 
 автор: snipe   (25.04.2010 в 08:33)   личное сообщение
 
 

forms![имя формы].recordsource=forms![имя формы].recordsource

  Ответить  
 
 автор: Zyec   (25.04.2010 в 14:07)   личное сообщение
 
 

К сожалению не помогло. Я предпологаю, что причина в том, что таблицы меняются в составе транзакции и фактическое их изменение происходит уже после обновления флага. Попробую изменение флага воткнуть внутрь транзакции...

  Ответить  
 
 автор: Zyec   (25.04.2010 в 19:53)   личное сообщение
 
 

Перенес изменение флага внутрь транзакции после update таблиц. Ничего не изменилось:
requery через раз возвращает старые данные. Пересоединение с RecordSource - тот же результат.

  Ответить  
 
 автор: час   (25.04.2010 в 20:55)   личное сообщение
 
 

А как Вы отлавливаете смену флага - "кто" этим занимается в Вашей программе - как реализовано обновление - приоткрытии формы или ещё как - может по таймеру?

  Ответить  
 
 автор: Zyec   (25.04.2010 в 23:47)   личное сообщение
 
 

По таймеру в одной из форм, открытой постоянно. Я уже разобрался: ядро Jet по-умолчанию кэширует данные, в том числе и на запись, в памяти. Можно это запретить принудительно, но тогда сильно замедляется работа, особенно с ракордсетами dbOpenDynaset. Помогла
команда DBEngine.Idle dbRefreshCache перед Requery. Она заставляет ядро скинуть все буферы записи в .mdb . До переделки Requery делалось раз в две секунды для всех открытых форм, при накоплении более 30000 записей в одной из таблиц начинался ступор, так как Requery всех форм занимало более этих 2 секунд. Теперь формы обновляются только по флагу, и запаздывание менее пол-секунды, что и требовалось.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList