Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Вниз

Stack overflow   Найти похожие ветки 

 
Lavrenty ©   (2007-06-05 14:48) [0]

Здравствуйте мастера! Почему-то при закрытии программы появляется сообщение "Stack overflow"


procedure TForm1.FormShow(Sender: TObject);
begin
 IBDB.Connected := true;
 IBT.StartTransaction;
 IBQ.Open;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if IBT.InTransaction then begin
   IBQ.DisableControls;
   IBQ.Close;
   IBT.Commit;
 end;
 IBT.StartTransaction;
 IBQ.Open;
 IBQ.EnableControls;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if IBT.InTransaction then
   try
     IBT.Commit;
   except
     IBT.Rollback;
     Application.MessageBox("Íå óäàëîñü çàâåðøèòü òðàíçàêöèþ IBT", "Çàêðûòèå çàïðîñà",
                             MB_OK+MB_ICONWARNING);
   end;
 Form1.Close;
end;


Запрос вывожу в обычный грид.


 
Sergey13 ©   (2007-06-05 14:55) [1]

Интересный подход к работе с транзакциями. Сам придумал?


 
Lavrenty ©   (2007-06-05 14:57) [2]

В этом деле новичок. А что не так?


 
Sergey13 ©   (2007-06-05 15:00) [3]

> [2] Lavrenty ©   (05.06.07 14:57)
> А что не так?

Да все. От начала до конца.
Тебе бы книжку какую нибудь про БД почитать надо. Про базовые (в смысле основные) принципы.


 
Lavrenty ©   (2007-06-05 15:07) [4]

Читаю. Решил попробовать что-то сделать. Наверное порядок расположения методов неправильный, но мне надо обновлять данные в гриде через, предположим 1 минуту, может поэтому так получилось? В книгах так и пишут: StartTransaction-DataSet.Open-действия-DataSet.close-Commit. Вот я и написал.


 
Sergey13 ©   (2007-06-05 15:36) [5]

> [4] Lavrenty ©   (05.06.07 15:07)

Если переложить твой алгоритм транзакций на двери в помещении, то получится примерно следующее:
При появлении тебя около здания открываются все двери и по таймеру (не зависимо от наличия в дверном проеме человека) начинают все сразу громко хлопать (закрываясь-открываясь).

> мне надо обновлять данные в гриде через, предположим 1 минуту
Зачем? Сколько записей возвращает запрос? Что за задача?


 
Lavrenty ©   (2007-06-05 15:45) [6]


> Sergey13


> Зачем? Сколько записей возвращает запрос? Что за задача?

Записей немного, от 5 до 20.  Программа выводит на экран информацию, которую читает из базы. База (соответствующие таблицы) может обновляться в любое время, и информация на табло должна быть свежей.


 
Sergey13 ©   (2007-06-05 16:32) [7]

> [6] Lavrenty ©   (05.06.07 15:45)

Это нечто вроде мониторинга?

А записи могут редактироваться?


 
clickmaker ©   (2007-06-05 16:35) [8]


> Программа выводит на экран информацию, которую читает из
> базы

а транзакции-то зачем, если она только читает?


 
Loginov Dmitry ©   (2007-06-05 16:39) [9]

Причина "Stack overflow" еще интересует автора?


 
Lavrenty ©   (2007-06-05 17:24) [10]

Прошу прощения за timeout, не увидел, что тема перемещена в другую конференцию.
> Loginov Dmitry ©   (05.06.07 16:39) [9]
> Причина "Stack overflow" еще интересует автора?

Нашёл причину.

> Sergey13 ©   (05.06.07 16:32) [7]


> Это нечто вроде мониторинга?А записи могут редактироваться?


> clickmaker ©   (05.06.07 16:35) [8]


> а транзакции-то зачем, если она только читает?

Всё немного сложнее. Есть программа, написанная не мной, но которую надо доделать. Она примерно через 1ч - 1,5 ч выдаёт сообщение "Out of memory" и дальше по таймеру "Transaction is active"  и всё тут. Стал разбираться и для начала сделал этот маленький сильно упрощённый модуль, но технология та же. В реальной программе запросов несколько, некоторые обновляются. Дальше не знаю, обсуждать или нет. Текст той программы доволно большой, выкладывать сюда наверное не стоит, а на словах описывать процесс работы - боюсь вас запутать. Так что если есть желание помочь отзовитесь.


 
tesseract ©   (2007-06-05 17:59) [11]


procedure TForm1.Timer1Timer(Sender: TObject);
begin
if IBT.InTransaction then begin
  IBQ.DisableControls;
  IBQ.Close;
  IBT.Commit;
end;
IBT.StartTransaction;
IBQ.Open;
IBQ.EnableControls;
end;


Выключи-ка таймер при входе в эту процедуру, а то точно stack overflow гарантирован.


 
Sergey13 ©   (2007-06-06 08:23) [12]

> [10] Lavrenty ©   (05.06.07 17:24)
> Она примерно через 1ч - 1,5 ч выдаёт сообщение "Out of memory"

Что она при этом делает? Наверное активно пишет в открытый датасет?



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

Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
1-1178180255
kyn66
2007-05-03 12:17
2007.07.01
DBGridEh - отсутствует свойство DisableScroll


2-1181116531
Wolferio
2007-06-06 11:55
2007.07.01
Выбол Листа в Excel


2-1180988044
Koha
2007-06-05 00:14
2007.07.01
помогите конвертировать время


2-1181368731
Mamana
2007-06-09 09:58
2007.07.01
Сообщение


2-1181275835
NNN
2007-06-08 08:10
2007.07.01
пароль на *.mdb





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский