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

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

Транзакции [D6, IB6.x]


Наташа ©   (2003-01-22 13:14:00) 

Мастера Dephi Просветите пожалуйста. Использую компонент IBDataBase, IBTransaction и несколько IBQuery. Для работы приложения достаточно одного компонента IBTransaction? и если нужно больше , то для чего?
И второй вопрос. При запуске приложения обновляю таблицу следующим образом
IBTransaction.StartTransaction
try
Вызов ХП по модификации д-х в таблице
IBTransaction.Commt
except
IBTransaction.Rollback
Raise;
End;
Затем отрываю набор д-х (Select * from Price)
При повторном обращении к ХП сообщает , что транзакция активна. Почему?
Никаких действий с другими наборами д-х больше не делаю.


Mihas   (2003-01-22 14:31:00) [1]

Так как в момент открытия компонента TIBTransaction автоматически стартует связанная с ним транзакция. Только после этого можно открывать какие-то наборы данных. Посколку транзакции не могут быть вложенными, такой фрагмент будет ошибочным !
Делай так :
Вызов ХП по модификации д-х в таблице
TIBxxxx.Post;
//IBTransaction.StartTransaction !!! Ошибка! транзакция уже
стартовала
if IBTransaction.Active = False then
IBTransaction.StartTransaction;
try
IBTransaction.Commt //или CommitRetaining
except
IBTransaction.Rollback //или RollbackRetaining
End;

IBTransaction.CommitRetaining и IBTransaction.RollbackRetaining я использую для IB6, так как после этого не нужно переодкрывать связанные с транзацией наборы данных, и тебе советую :)
Я вставляю такой код во всех компонентах в котых можно редактировать данные в AfterPst и все работает чудно !
Пример:
procedure TDM.TIBQuery1AfterPost(DataSet: TDataSet);
begin
try
IBTransaction1.CommitRetaining;
except
IBTransaction1.RollbackRetaining;
end;
end;
Успехов тебе !


Наталия   (2003-01-22 14:25:00) [2]

Количество транзакций - дело вкуса. Я обычно делаю одну на чтение, другую на изменение записей. на www.ibase.ru почитай про них.


Наверх

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