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