![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stack overflow [D7, IBX7.1]
Lavrenty © (2007-06-05 14:48:00)Здравствуйте мастера! Почему-то при закрытии программы появляется сообщение '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-06 08:23:00) [1]> [10] Lavrenty © (05.06.07 17:24)
> Она примерно через 1ч - 1,5 ч выдаёт сообщение "Out of memory"
Что она при этом делает? Наверное активно пишет в открытый датасет?
tesseract (2007-06-05 17:59:00) [2]
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 гарантирован.
Lavrenty (2007-06-05 17:24:00) [3]Прошу прощения за 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' и всё тут. Стал разбираться и для начала сделал этот маленький сильно упрощённый модуль, но технология та же. В реальной программе запросов несколько, некоторые обновляются. Дальше не знаю, обсуждать или нет. Текст той программы доволно большой, выкладывать сюда наверное не стоит, а на словах описывать процесс работы - боюсь вас запутать. Так что если есть желание помочь отзовитесь.
Loginov Dmitry (2007-06-05 16:39:00) [4]Причина 'Stack overflow' еще интересует автора?
clickmaker (2007-06-05 16:35:00) [5]
> Программа выводит на экран информацию, которую читает из
> базы
а транзакции-то зачем, если она только читает?
Sergey13 (2007-06-05 16:32:00) [6]> [6] Lavrenty © (05.06.07 15:45)
Это нечто вроде мониторинга?
А записи могут редактироваться?
Lavrenty (2007-06-05 15:45:00) [7]
> Sergey13
> Зачем? Сколько записей возвращает запрос? Что за задача?
Записей немного, от 5 до 20. Программа выводит на экран информацию, которую читает из базы. База (соответствующие таблицы) может обновляться в любое время, и информация на табло должна быть свежей.
Sergey13 (2007-06-05 15:36:00) [8]> [4] Lavrenty © (05.06.07 15:07)
Если переложить твой алгоритм транзакций на двери в помещении, то получится примерно следующее:
При появлении тебя около здания открываются все двери и по таймеру (не зависимо от наличия в дверном проеме человека) начинают все сразу громко хлопать (закрываясь-открываясь).
> мне надо обновлять данные в гриде через, предположим 1 минуту
Зачем? Сколько записей возвращает запрос? Что за задача?
Lavrenty (2007-06-05 15:07:00) [9]Читаю. Решил попробовать что-то сделать. Наверное порядок расположения методов неправильный, но мне надо обновлять данные в гриде через, предположим 1 минуту, может поэтому так получилось? В книгах так и пишут: StartTransaction-DataSet.Open-действия-DataSet.close-Commit. Вот я и написал.
Sergey13 (2007-06-05 15:00:00) [10]> [2] Lavrenty © (05.06.07 14:57)
> А что не так?
Да все. От начала до конца.
Тебе бы книжку какую нибудь про БД почитать надо. Про базовые (в смысле основные) принципы.
Lavrenty (2007-06-05 14:57:00) [11]В этом деле новичок. А что не так?
Sergey13 (2007-06-05 14:55:00) [12]Интересный подход к работе с транзакциями. Сам придумал?