![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TpFIBQuery и транзакции
User_OKA © (2002-04-22 09:31:00)Для запросов к базе IB использую TpFIBQuery (св-во Options.qoStartTransaction:=true). Нужно ли после ExecQuery (запрос на чтение типа "SELECT...")всякий раз делать Commit?
Константин (2002-04-29 09:32:00) [1]Я думаю так.
Трансакция это трансакция! Она либо завершается Commit или Rollback. Других вариантов быть просто не может.
Если Вы используете Query для создания запроса, то вы работаете в рамках текущей трансакции и если работа не окончена, зачем запускать еще одну трансакцию? Работайте дальше. Открывайте и закрывайте свой Query сколько хотите он трансакцией не управляет.
Turalyon (2002-04-22 15:12:00) [2]Я обчно делаю так, как предложил Johnmen © , т.е. стартую транзакцию явно... в твоем случае TpFIBTransaction.StartTransaction и дальше все что будет происходить в TpFIBQuery (которая связана с этой транзакцией), будет делаться в одной транзакции, до тех пор пока ты ее не закроешь... (лучше так же явно). Т.е. можешь хоть десять выборок сделать и еще и какие нить изменения в таблицу внести.
А, на сколько я понимаю, ExecSQL стартует ее неявно, т.е. если у тебя она не была запущена, запускает, если запущена, то все телодвижения делает в рамках это транзакции.
Johnmen (2002-04-22 14:58:00) [3]Наверно загнался...:)
Не ставь никаких qoStartTransaction, а используй pFIBTransaction ...
>при этом последующая транзакция закрывает предыдущую?
это можно легко проверить !
хотя я думаю, что нет....
User_OKA (2002-04-22 14:43:00) [4]to Turalyon ©
Что-то не въеду! Каждый ExecSQL стартует транзакцию (грубо говоря, как если бы при отключенном св-ве qoStartTransaction я сам задавал TpFIBTransaction.StartTransaction), при этом последующая транзакция закрывает предыдущую?
Или я совсем загнался?
Turalyon (2002-04-22 14:00:00) [5]Нет, если у тебя компонент TpFIBQuery привязан к одной транзакции, то все будет происходить только в ней, просто после выполнения запроса транзакция не закроется... пока ей не скажешь.
Правда е я не в курсе как происходит связка с транзакцией именно у этого компонента, я сужу по IBQuery, но подозреваю, что так же.
Johnmen (2002-04-22 13:58:00) [6]Я что-то не понял, а где pFIBTransaction ?
User_OKA (2002-04-22 13:49:00) [7]to Johnmen
Интересное кино! Получается, если я 10 раз сделал запрос на чтение TpFIBQuery.ExecQuery, то у меня 10 транзакций открылось. А commit делать не надо. Как мне лишние транзакции прикрыть? Может вообще другой компонент использовать?
Johnmen (2002-04-22 13:32:00) [8]Обычно в приложении не используют более двух транзакций одновременно. Лимит существует на все :) В данном случае я его не знаю, но думаю, что он весьма велик...
User_OKA (2002-04-22 12:28:00) [9]to Johnmen
А количество открытых транзакций как-то лимитируется?
Johnmen (2002-04-22 10:19:00) [10]>Turalyon © : Вот именно ! А после выполнения Commit полученный НД будет закрыт...
Turalyon (2002-04-22 09:50:00) [11]>Johnmen ©
Я ведь так понял, что программа стартует тразакцию при любом обращение к базе??? Даже на простую выборку?
Johnmen (2002-04-22 09:47:00) [12]Нет.