Я ищу способ указать пользовательский уровень транзакций в Delphi DBX с помощью драйвера firebird. Я использую Delphi XE.
В редакторе параметров компонента TSQLConnection я могу установить различные значения TransIsolation, и я использую значение по умолчанию ReadCommited
. Свойству WaitOnLocks
установлено значение True
.
Я ожидаю, что это использует следующую конфигурацию транзакций firebird, но я не уверен:
READ WRITE + WAIT + SNAPSHOT
(см. http://www.firebirdsql.org/refdocs/langrefupd20-set-trans.html)
Я хотел бы использовать LOCK TIMEOUT [seconds]
вместо WAIT
. Но я не могу найти, как и где это указать. Я посмотрел в исходных файлах DBX и есть код для пользовательских уровней транзакций (поиск xilCUSTOM
), но он кажется незавершенным/неиспользуемым.
Причиной этого является то, что мы иногда сталкиваемся с тупиком в нашем многопользовательском приложении datasnap, и я думаю, потому что одна транзакция ждет другую (возможно, мертвую) транзакцию. Мы предпочли бы, чтобы транзакция прерывалась через пару секунд, чем зависание всего клиента на неопределенный срок.