Форум: "Базы";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c