Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизОшибка при закрытии программы Найти похожие ветки
← →
ввх © (2004-10-20 22:22) [0]Здравствуйте Мастера! Возможно мой вопрос необходимо рассматривать в другой конференции, но дело в том что программа написана для работы с базой данных, поэтому я решил написать сюда.
Дело вот в чем: программа компилируется нормально, но при завершении выскакивает ошибка:
.... EListError with message "List index out of bounds (7).
Причем если внести какое нибудь изменение, например заремировать любую строку, то все нормально. Закрываем проэкт, открываем снова, компилируем, и ошибка появляется опять. Возвращаем то что заремировали, компилируем - завершение нормально. Снова закрываем проэкт, открываем, компилируем - ошибка. Я уже что только не пробовал, ничего не получается. Помогите пожалуйста! Если необходимо предоставлю фрагменты исходного кода.
← →
Vemer © (2004-10-20 23:15) [1]У меня похожее было при работе с D на медленной машине.
Лечилось перезапуском D.
А номера параметров (индексы по ихнему в данном случае) я бы проверил все-таки.
← →
ввх © (2004-10-20 23:36) [2]У меня Celeron 1200, 256 RAM - неужели медленная машина?
/А номера параметров (индексы по ихнему в данном случае) я бы проверил все-таки./
Параметры чего? И где их проверять?
← →
DrPass © (2004-10-20 23:56) [3]
> Дело вот в чем: программа компилируется нормально, но при
> завершении выскакивает ошибка:
Это все-таки логическая ошибка - где-то у тебя или ресурсы неправильно освобождаются, или еще что-то. Без кода не выяснить
← →
DeepSky © (2004-10-21 00:10) [4]В принципе, самое распространённое в прогах, работающих с БД - это ошибка с параметрами Query. Хотя наверняка
> Без кода не выяснить
← →
ввх © (2004-10-21 00:12) [5]Я не знаю какой код привести точно, возьму пожалуй запрос на закрытие программы:
procedure TfMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
k:integer;
begin
if Application.MessageBox("Выйти из программы?",
"Выход",MB_ICONQUESTION+MB_OKCANCEL)=IDOK then
begin
with DMClient do
begin
if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
if pFIBTransaction2.Active then pFIBTransaction2.Rollback;
for k:=0 to componentCount-1 do
begin
if components[k] is TpFIBDataSet then
(components[k] as TpFIBDataSet).Active:=False;
end;
with pFIBDatabase1 do
begin
if Connected then close;
end;
end;
AbonentData.Free;
CanClose:=True;
end
else CanClose:=False;
end;
← →
ЮЮ © (2004-10-21 02:45) [6]Ну это же не вся программа.
(components[k] as TpFIBDataSet).Active:=False, наверняка, вызывает навешанные на TpFIBDataSet обработчики.
Неужели сложно с отладчиком пройти всю эту процедуру и найти место, где возникает ошибка?
← →
Deniz © (2004-10-21 08:22) [7]Добавлю, что при закрытии транзакции
if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
if pFIBTransaction2.Active then pFIBTransaction2.Rollback;
все, связанные с этими транзакциями, датасеты закрываются автоматически, и соот-ноfor k:=0 to componentCount-1 do
...
практически не нужен.
Что такое AbonentData?
← →
Johnmen © (2004-10-21 09:12) [8]Ещё общие замечания по коду.
1. зачем в циклеfor k:=0
бегин блок ?
2. зачем вwith pFIBDatabase1 do
бегин блок ?
3.AbonentData.Free;
надо делать явно не здесь; или выполнять проверку.
← →
msguns © (2004-10-21 09:34) [9]А у меня вопросы по транзакциям.
Раз имеется более одной транзакции, а БД одна (судя по коду), след-но можно предположить, что весь обмен данными с БД функционально разбит на 2 части: предположительно читающую и пишущую. А если так, то к чкму это:if pFIBTransaction1.Active then pFIBTransaction1.Rollback;
if pFIBTransaction2.Active then pFIBTransaction2.Rollback;
Далее. Сначала завершаем (в данном случае откатываем)транзакции, а потом закрываем НД, выполнявшиеся в рамках этих транзакций ?
Ну и опять же совершенно неясно, что там делается в обработчиках событий тех же датасетов (например AfterScroll или AfterClose), которые запросто могут "ожить" при завершении транзакции. Ну и прочее.
Любопытно было бы также узнать, какие "отремленные" строки кода приводят к краху приложения.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c