lazarus = Firebird - транзакции

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: lazarus = Firebird - транзакции

Сообщение MylnikovDm » 03.05.2018 00:31:59

Уважаемый slyubez, то, что транзакция сразу стартует в состоянии "committed" на стороне сервера вовсе не означает, что она "закрыта". В некотором смысле это "фича" конкретного сервера FireBird. Насколько мне известно, на всех остальных серверах "закрытие" транзакции, то бишь вызов committed, прекращает транзакцию, после чего никакие операции с данными больше не возможны. Мало того, даже при работе с сервером FireBird после того, как вы запустили свою транзакцию в режиме read, read_committed, её можно закрыть вызовом committed точно также, как и любую другую транзакцию.

То есть, вы правы по сути, но сформулировали свою мысль не совсем корректно с технической точки зрения.

Что касается DB-aware компонентов, то тут всё зависит от решаемой задачи. Для простых проектов, при правильном их использовании, они вполне себе работают.
Если же разрабатывать крупный проект, то работать с "голыми" StringGrid и ListView лично для меня было бы слишком неэффективным расходом времени и сил на написание однотипного кода. Гораздо проще было бы сделать свои более "умные" компоненты вместо встроенных. Но тут уже каждый сам себе командир. :)
MylnikovDm
постоялец
 
Сообщения: 103
Зарегистрирован: 15.02.2007 21:26:10
Откуда: Челябинск

Re: lazarus = Firebird - транзакции

Сообщение *Rik* » 03.05.2018 09:42:57

bpg
Используйте IBX для Firebird, там 2 транзакции предусмотрены, одна для чтения, вторая для изменения данных.
http://visual-t.ru/ibexpress.html
Иначе Вы просто замучаетесь с SQLDb + FireBird.

Транзакцию для чтения, стартуете руками при открытии приложения с параметрами
read
read_committed
rec_version
nowait
При закрытии приложения, завершите эту транзакцию тоже руками, она ресурсов есть не будет и все чтения в процессе работы своего приложения делаете через неё.

Транзакция для Обновления данных, установите у неё параметры
write
wait
no_rec_version
read_committed
В компонентах (если конечно не снимите опцию AutoStartTransaction и AutoCommit) она будет запускаться и завершаться автоматически при обновлении данных.
Работаете через эти 2 транзакции. Обычно их хватает для всего приложения.

Если будете использовать Events учтите что они стартуют на случайном порту, если используете файрвол, то приложение с событиями может вообще не запуститься, либо конкретный порт нужно прописывать и в файрволе открывать.

Сможете нормально по человечески использовать компоненты DB-aware. У меня приложение на всю контору, 200 модулей, сотня рабочих мест, уже несколько лет полет нормальный.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: lazarus = Firebird - транзакции

Сообщение slyubez » 03.05.2018 22:38:52

В некотором смысле это "фича" конкретного сервера FireBird. Насколько мне известно, на всех остальных серверах "закрытие" транзакции, то бишь вызов committed, прекращает транзакцию, после чего никакие операции с данными больше не возможны. Мало того, даже при работе с сервером FireBird после того, как вы запустили свою транзакцию в режиме read, read_committed, её можно закрыть вызовом committed точно также, как и любую другую транзакцию.

Всё верно.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 23

Рейтинг@Mail.ru