Форум: "Начинающим";
Текущий архив: 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