Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.48 MB
Время: 0.045 c
15-1189577484
Washington
2007-09-12 10:11
2007.10.14
Сгорание флешек


2-1190314315
qadeveloper2
2007-09-20 22:51
2007.10.14
Ссылка?


3-1181219382
Megabyte
2007-06-07 16:29
2007.10.14
Операции в расширенном SQL для ХП


2-1190037815
F@T@L_Err0r
2007-09-17 18:03
2007.10.14
Регулятор громкости


6-1171376436
X-Nex
2007-02-13 17:20
2007.10.14
WebBrowser конец загрузки страницы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский