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 модулей, сотня рабочих мест, уже несколько лет полет нормальный.