У меня есть простое приложение DBExpress, использующее базу данных SQLite на C ++ Builder XE3.
Пользовательский интерфейс имеет несколько DBGrids и DBNavigators. DBGrids связаны с TDataSources, которые связаны с TClientDataSets. TClientDataSets получает данные от TDataProviders, которые получают данные из TSQLDataSet. Все подключено к TSQLConnection.
Приложение работает нормально, за исключением случаев, когда данные публикуются другим компонентом БД, не связанным с приложением. Чтобы получить новые «удаленные» данные, мне нужно дважды нажать кнопку «Обновить» в навигаторе (2).
Я получаю такое же поведение со следующим кодом:
mClientDBSession.insertImageFile(getFileNameNoPath(f), "Note..");
DBNavigator1->BtnClick(nbRefresh);
DBNavigator1->BtnClick(nbRefresh);
MClientDBSession — это объект базы данных, не связанный с DBExpress. InsertImageFile вставляет запись БД непосредственно в базу данных SQLite и является синхронной, поэтому я знаю, что БД получила данные после выхода из функции.
Как ни странно, если я не вызываю BtnClick (nbRefresh) дважды, данные не обновляются, если смотреть на DBGrid.
В идеале у меня был бы таймер, который автоматически обновлял бы компоненты DBExpress новыми данными сервера время от времени.
Задача ещё не решена.
Других решений пока нет …