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

Вниз

FIBDataSet.RollBack   Найти похожие ветки 

 
DelphiLexx ©   (2007-05-25 11:38) [0]

FibDataSet.Rollback вызывает функции isc_rollback_transaction из библиотеке fbclient.dll для Firebird"a 1.5>0. Есть у меня проблемка с этим RollBack"ом. Дело в том, что в OnDestroy формы у меня вызывается RollBack или Commit в зависимости от того выбрал пользователоь отменить или сохранить данные. Так RollBack выполнятся несколько если БД сетевая т.е. БД располается на одном компе, а юзер на другом. Так вот, когда пользователь нажимает не сохранять данные, дочерняя (у меня MDI приложение) форма закрывается, а затем вызывается OnDestroy и соответственно RollBack, который выполняется несколько секунд. Если сразу после закрытия дочерней формы попыться закрыть главную форму возникает ошибка, это происходит из-за того, что RollBack еще не завершился, а мы пытаемся закрыть приложение.
Ошибку см. рис.


 
Johnmen ©   (2007-05-25 11:50) [1]

Печальная история.... Пеши исчо.

ЗЫ Картинка тута
http://sql.ru/forum/actualthread.aspx?tid=433293


 
ЮЮ ©   (2007-05-25 12:03) [2]

> Если сразу после закрытия дочерней формы попыться закрыть
> главную форму возникает ошибка, это происходит из-за того,
> что RollBack еще не завершился, а мы пытаемся закрыть приложение

Это происходит, ИМХО, по другим причинам, которые сокрыты в твоём (или Fib-овском) коде и выясняется только отладчиком, ибо телепеторы так далеко не видят


 
DelphiLexx ©   (2007-05-25 20:46) [3]


> Это происходит, ИМХО, по другим причинам, которые сокрыты
> в твоём (или Fib-овском) коде

При чем здесь Fib"овский код - ошибка происходит из - за несинхронности т.е. RollBack еще не завершился а мы пытаемся закрыть приложение. Поэтому нужно как-то синхронизировать т.е не давать пользователю куда-либо кликать пока идет откат.


 
Johnmen ©   (2007-05-25 21:08) [4]


> При чем здесь Fib"овский код - ошибка происходит из - за
> несинхронности

Да ты всё знаешь!
К чему тогда эти глупые проблемы?


 
atruhin ©   (2007-05-25 21:48) [5]

> FibDataSet.Rollback

Вроде это синхронная функция? Как можно закрыть главное окно, пока она выполняется?


 
DelphiLexx ©   (2007-05-28 09:59) [6]


> Как можно закрыть главное окно, пока она выполняется?

Я так понимаю, окно на самом деле не закрывается пока выполняется RollBack, но сообщение на закрытие формы было поставлено на очередь, поэтому получается такая ситуация:
procedure TMyForm.OnDestroy(Sender: TObject);
begin
...
 {идёт выполнение RollBack"a}
 code R"llBack"a
 begin
   1...
   2...
   3...  
   ...
   {за счет того, что я нажимаю на крестик Main формы происходит посылка
    соощения wm_close, и сообщение становится в очередь.}
   ...
   n
 end;
...
{здесь помимо RollBack"a выполняется еще некоторый код, так вот вместо того чтобы выполнялся этот код обработается сообщение wm_close MainForm т.е. когда мы окажемся здесь, то вызывается ошибка т.к. уже не существует MainForm}
...
end;


 
ЮЮ ©   (2007-05-28 10:38) [7]

так вот вместо того чтобы выполнялся этот код обработается сообщение wm_close MainForm

Чтобы этого не происходило не надо ставить где попало Application.ProcessMessages.


 
DelphiLexx ©   (2007-05-28 13:37) [8]


> Application.ProcessMessages

Так он у меня и не стоит


 
atruhin ©   (2007-05-28 16:59) [9]

> [6] DelphiLexx ©   (28.05.07 09:59)
> но сообщение на закрытие формы было поставлено на очередь,

Ерунду городишь. Ищи ошибку в своем коде.
> здесь помимо RollBack"a выполняется еще некоторый код

Ни кто не может выполняться помимо RollBack"a. Естественно если не созданны дополнительные потоки.


 
DelphiLexx ©   (2007-05-28 18:09) [10]


> Естественно если не созданны дополнительные потоки.

Нет у меня дополнительных потоков.


 
Interior   (2007-06-04 12:06) [11]

В общем надо как-то узнать завершился роллбэк или нет.
Была похожая проблема.
Решил в лоб: при закрытии выводил MessageBox("Прощальное сообщение");
с кнопкой Ok.
После ее нажатия все закрывалось тихо и мирно. Видимо времени хватало на завершение.


 
DelphiLexx ©   (2007-06-06 10:48) [12]


> Решил в лоб: при закрытии выводил MessageBox("Прощальное
> сообщение");с кнопкой Ok.

Что за прощальное сообщение


 
Сергей М. ©   (2007-06-06 15:01) [13]


> Что за прощальное сообщение


"Аминь !"


 
Interior   (2007-06-10 22:18) [14]

;-)



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
8-1167754032
artos221
2007-01-02 19:07
2007.10.14
Язык Морзе


8-1167179619
Andy BitOff
2006-12-27 03:33
2007.10.14
Смена палитры в TGPImage --- GDI+


2-1190022039
Владимир_А
2007-09-17 13:40
2007.10.14
file


2-1190264949
Kolan
2007-09-20 09:09
2007.10.14
Почему может не работать AutoHotKeys?


15-1190105915
Сергей М.
2007-09-18 12:58
2007.10.14
про Линух ..