Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > TIBTransaction, когда происходит Commit?


Автор: pavelv 26.12.2006, 08:39
Настройки тразакции:
DefaultAction: TACommit;
параметры:
read_committed
rec_version
nowait
IdleTimer = 0;
В IbDatabase эта же транзакиция стоит на default.

Хочу понять в какой именно момент происходит "коммит" у данной транзакции? Судя по настройкам должен быть сразу, но к примеру при такой последовательности запросов:
'Create table TEST(a integer)'
И потом сразу:
'select * from TEST' - этот запрос выдаёт ошибку о том, что таблица ещё не существует. Но если после верхнего сделать "Commit", то второй срабатывает нормально.
Запрос делаю через TIBQueryу кт в транзакциях указана вышеописанная.



Автор: Mephisto 26.12.2006, 09:37
Насколько я знаю создание, удаление таблиц, БД, триггеров и.т.д. не может быть по определению внутри одной транзакции. Для них нужно делать отдельные. А под 1 транзакцией понимается все от open..Close, Exec..Close. Так что лучше сам определяй где и когда тебе нужно делать comit и rollback!  smile 

Автор: pavelv 26.12.2006, 11:07
Тоесть предлагаешь DefaultAction ставить на None и выполнять всё тоже самое?

P.S> Где можно прочитать инфу о том, что определено в рамках одной транзакции. К примеру добавление полей определено в рамках одной транзакции?

Автор: Mephisto 26.12.2006, 12:46
Цитата(pavelv @  26.12.2006,  12:07 Найти цитируемый пост)
Тоесть предлагаешь DefaultAction ставить на None и выполнять всё тоже самое?

Оставь как есть. Просто когда закрываешь query он будет делать действие по умолчанию. Лично я делаю все явно. ;)
Цитата(pavelv @  26.12.2006,  12:07 Найти цитируемый пост)
Где можно прочитать инфу о том, что определено в рамках одной транзакции. 

Читай литературу по Interbase. Буквари по Delphi такие детали думаю не содержат!

Автор: Golden Hands 30.12.2006, 01:20
Нельзя в одной транзакции менять медаданные и тут же выполнять запросы, которые используют эти метаданные:
alter table add field1 int
update table set field1 = 10

Автор: Mephisto 3.1.2007, 09:52
Golden Hands, и я о чем...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)