Подтвердить что ты не робот

Пользовательский уровень транзакций в 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, и я думаю, потому что одна транзакция ждет другую (возможно, мертвую) транзакцию. Мы предпочли бы, чтобы транзакция прерывалась через пару секунд, чем зависание всего клиента на неопределенный срок.

4b9b3361

Ответ 1

Только мои маленькие центы. По моему опыту объекты IBO, упомянутые JustME, являются очень приличной библиотекой. В другом пункте - я полагаю, вы пытались определить сценарий, который ведет к вашему тупику? Это очень непредсказуемая ситуация? Просто интересно, есть ли у вас другие ситуации, которые WAIT фактически разрешает приложению продвигаться вперед, что будет отрицательно сказываться, если вы используете тайм-аут блокировки. Возвращаясь к моему первому комментарию - с Firebird обычно лучше использовать специальную библиотеку, которая есть. Надеюсь, вам понравится!