![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FIBDataSet.RollBack
DelphiLexx © (2007-05-25 11:38:00)FibDataSet.Rollback вызывает функции isc_rollback_transaction из библиотеке fbclient.dll для Firebird'a 1.5>0. Есть у меня проблемка с этим RollBack'ом. Дело в том, что в OnDestroy формы у меня вызывается RollBack или Commit в зависимости от того выбрал пользователоь отменить или сохранить данные. Так RollBack выполнятся несколько если БД сетевая т.е. БД располается на одном компе, а юзер на другом. Так вот, когда пользователь нажимает не сохранять данные, дочерняя (у меня MDI приложение) форма закрывается, а затем вызывается OnDestroy и соответственно RollBack, который выполняется несколько секунд. Если сразу после закрытия дочерней формы попыться закрыть главную форму возникает ошибка, это происходит из-за того, что RollBack еще не завершился, а мы пытаемся закрыть приложение.
Ошибку см. рис.
Interior (2007-06-10 22:18:00) [1];-)
Сергей М. (2007-06-06 15:01:00) [2]
> Что за прощальное сообщение
"Аминь !"
DelphiLexx (2007-06-06 10:48:00) [3]
> Решил в лоб: при закрытии выводил MessageBox("Прощальное
> сообщение");с кнопкой Ok.
Что за прощальное сообщение
Interior (2007-06-04 12:06:00) [4]В общем надо как-то узнать завершился роллбэк или нет.
Была похожая проблема.
Решил в лоб: при закрытии выводил MessageBox("Прощальное сообщение");
с кнопкой Ok.
После ее нажатия все закрывалось тихо и мирно. Видимо времени хватало на завершение.
DelphiLexx (2007-05-28 18:09:00) [5]
> Естественно если не созданны дополнительные потоки.
Нет у меня дополнительных потоков.
atruhin (2007-05-28 16:59:00) [6]> [6] DelphiLexx © (28.05.07 09:59)
> но сообщение на закрытие формы было поставлено на очередь,
Ерунду городишь. Ищи ошибку в своем коде.
> здесь помимо RollBack'a выполняется еще некоторый код
Ни кто не может выполняться помимо RollBack'a. Естественно если не созданны дополнительные потоки.
DelphiLexx (2007-05-28 13:37:00) [7]
> Application.ProcessMessages
Так он у меня и не стоит
ЮЮ (2007-05-28 10:38:00) [8]так вот вместо того чтобы выполнялся этот код обработается сообщение wm_close MainForm
Чтобы этого не происходило не надо ставить где попало Application.ProcessMessages.
DelphiLexx (2007-05-28 09:59:00) [9]
> Как можно закрыть главное окно, пока она выполняется?
Я так понимаю, окно на самом деле не закрывается пока выполняется 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;
atruhin (2007-05-25 21:48:00) [10]> FibDataSet.Rollback
Вроде это синхронная функция? Как можно закрыть главное окно, пока она выполняется?
Johnmen (2007-05-25 21:08:00) [11]
> При чем здесь Fib'овский код - ошибка происходит из - за
> несинхронности
Да ты всё знаешь!
К чему тогда эти глупые проблемы?
DelphiLexx (2007-05-25 20:46:00) [12]
> Это происходит, ИМХО, по другим причинам, которые сокрыты
> в твоём (или Fib-овском) коде
При чем здесь Fib'овский код - ошибка происходит из - за несинхронности т.е. RollBack еще не завершился а мы пытаемся закрыть приложение. Поэтому нужно как-то синхронизировать т.е не давать пользователю куда-либо кликать пока идет откат.
ЮЮ (2007-05-25 12:03:00) [13]> Если сразу после закрытия дочерней формы попыться закрыть
> главную форму возникает ошибка, это происходит из-за того,
> что RollBack еще не завершился, а мы пытаемся закрыть приложение
Это происходит, ИМХО, по другим причинам, которые сокрыты в твоём (или Fib-овском) коде и выясняется только отладчиком, ибо телепеторы так далеко не видят
Johnmen (2007-05-25 11:50:00) [14]Печальная история.... Пеши исчо.
ЗЫ Картинка тута
http://sql.ru/forum/actualthread.aspx?tid=433293