Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо