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

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

Как работать с транзакциями в MDI приложении? [D6, IB6.x]


Tony Green ©   (2002-08-09 16:50:00) 

Приветствую всех. Вопрос такой:

Нужно MDI приложение с двумя MDI Child формами. В каждой из них может производиться длительное действие по занесению данных в БД(набор длинных накладных, например) нуждающееся в транзакции. Как это правильно реализовать?


Polevi   (2002-08-10 17:26:00) [1]

23JIA9I CyKA ©
почему так мало ?


3JIA9I CyKA   (2002-08-09 17:50:00) [2]

тогда по 2 шт.


Polevi   (2002-08-09 17:23:00) [3]

23JIA9I CyKA ©
спасибо, я пользуюсь фастрепортом


3JIA9I CyKA   (2002-08-09 17:13:00) [4]

2Polevi
А можно ещё QReport для каждого создавать - он там тоже не нужен.


Polevi   (2002-08-09 17:10:00) [5]

можно для каждого MDI окна динамически создавать датамодуль со всеми вытекающими


Ura   (2002-08-09 17:04:00) [6]

1. Определяешь транзакцию в форме (устанавливаешь ее свойства)
IBTransactionKassa := TIBTransaction.Create(DM);
IBTransactionKassa.Params.Add("isc_tpb_read_committed");
IBTransactionKassa.Params.Add("isc_tpb_rec_version");

2. Создаешь компоненты для доступа к данным
IBQ_Kassa := TIBQuery.Create(DM) ;
IBU_Kassa := TIBUpdateSQL.Create(DM);
DS_Kassa := TDataSource.Create(DM);
(лучше иметь заготовку этих запросов в датамодуле и просто их назначитm на обработку (криво но работает, а главное протестить можно в датамодуле) Пример ниже )
IBQ_Kassa.SQL := DM.IBQ_Kassa.SQL;
IBQ_Kassa.AfterInsert := DM.IBQ_Kassa.AfterInsert;
IBQ_Kassa.OnNewRecord := DM.IBQ_Kassa.OnNewRecord;
IBU_Kassa.InsertSQL.Add(DM.IBU_Kassa.InsertSQL.Text);
3. Добавили транзакцию к базе
IBTransactionKassa.DefaultDatabase := DM.IBDatabase;
DM.IBDatabase.AddTransaction(IBQ_Kassa.Transaction);
4. Установили транзакцию и запустили
IBQ_Kassa.Transaction := IBTransactionKassa;
IBTransactionKassa.StartTransaction;
5. Ну соответственно можно теперь делать откат и сохранение через транзакцию...
6. и в конце
DM.IBDatabase.RemoveTransaction( DM.IBDatabase.FindTransaction(IBTransactionKassa));
IBTransactionKassa.Free;
IBTransactionKassa := nil; // может и ненадо :-)



Наверх

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