Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.015 c
11-1173789560
Dmitriy___
2007-03-13 15:39
2007.10.14
Копирование Юникода в буфер


2-1190116879
voe
2007-09-18 16:01
2007.10.14
Работа со string переменными


2-1189972791
Alexey_K
2007-09-16 23:59
2007.10.14
Окно, подобие понели задач


15-1190128267
VirEx
2007-09-18 19:11
2007.10.14
Российская demoкратия (с)


2-1189625872
aids
2007-09-12 23:37
2007.10.14
матрица




   Наверх