Пользовательский уровень транзакций в Delphi DBX firebird - PullRequest
13 голосов
/ 29 февраля 2012

Я ищу способ указать пользовательский уровень транзакций в DBX Delphi с помощью драйвера 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 Ответ

0 голосов
/ 12 марта 2012

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

...