Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
4-73469
VID
2002-03-23 01:39
2002.05.23
Изменения свойства объекта в другой программе


3-72997
Pavel_S
2002-04-20 16:24
2002.05.23
INTERBASE и тормоза


1-73174
velk
2002-05-14 09:41
2002.05.23
Как отловить сообщение от нажатой ссылки?


1-73260
Kopachev
2002-05-10 08:27
2002.05.23
Маленький вопрос про Canvas


7-73420
Nigth
2002-02-23 16:50
2002.05.23
Прикол так сказать....