Пользовательский уровень транзакций в Firebird Delphi DBX
Я ищу способ указать пользовательский уровень транзакций в 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, и я думаю, потому что одна транзакция ждет другую (возможно, мертвую) транзакцию. Мы предпочли бы, чтобы транзакция прерывалась через пару секунд, чем зависание всего клиента на неопределенный срок.
Ответы
Ответ 1
Только мои маленькие центы. По моему опыту объекты IBO, упомянутые JustME, являются очень приличной библиотекой. В другом пункте - я полагаю, вы пытались определить сценарий, который ведет к вашему тупику? Это очень непредсказуемая ситуация? Просто интересно, есть ли у вас другие ситуации, которые WAIT фактически разрешает приложению продвигаться вперед, что будет отрицательно сказываться, если вы используете тайм-аут блокировки. Возвращаясь к моему первому комментарию - с Firebird обычно лучше использовать специальную библиотеку, которая есть. Надеюсь, вам понравится!