Как получать всегда свежие данные с помощью Zeos TZConnection и TZQuery (в режиме AutoCommit)?

У меня есть приложение Delphi с TZConnection в режиме AutoCommit (подключение к Firebird 3.0) в глобальном DataModule, это единственное соединение обслуживает все запросы во всех модулях данных приложения.

Но у меня проблема в том, что запросы видят только данные, которые были зафиксированы на этапе подключения, а запросы не отображают новые/свежие данные, поступающие либо из других экземпляров приложения, либо из других компонентов (например, наборов данных IBX) из такое же приложение.

TZConnection.Reconnect решает эту проблему, но я не уверен, что случилось с другими открытыми формами во время такого жесткого переподключения.

В основном было бы неплохо иметь процедуры TZonnection.CommitRetaining или RollbackRetaining (аналогичные тому, что есть у IBX TIBTransaction), но у TZConnection нет таких функций и даже TZConnection.Commit не работает в режиме AutoCommit (выдается ошибка, что Commit is incommit is incommit в режиме автофиксации).

Итак, как лучше всего получить свежие данные с помощью TZConnection. Я был бы рад выполнить какую-либо функцию в TZonnection при открытии нового модуля данных или по запросу клиента для нового отчета.


person TomR    schedule 21.12.2018    source источник


Ответы (1)


Установка свойства TZConnection TransactionIsolationLevel на tiReadCommitted и AutoCommit на true решает проблему.

person TomR    schedule 27.12.2018