Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизAV при Destroy Найти похожие ветки
← →
}|{yk © (2004-08-09 14:52) [0]Такой вот код, во фрейме
destructor TFrameReportByMonth.Destroy;
begin
OpExcelRep.Visible := false;
OpExcelRep.Connected := false;
DataModuleMain.OraQueryMonthes.Active := false;
DataModuleMain.SmartQueryPlat.Active := false;
inherited Destroy;
end;
Получаю AV на
DataModuleMain.OraQueryMonthes.Active := false;
← →
Anatoly Podgoretsky © (2004-08-09 14:58) [1]Или DataModuleMain или OraQueryMonthes имеют недопустимое значение
← →
Ega23 © (2004-08-09 15:00) [2]С
Connected:=false
местами поменять?
← →
Sandman25 © (2004-08-09 15:03) [3]Структура неверная. Не должен фрейм обращаться к датамодулям.
← →
}|{yk © (2004-08-09 15:04) [4]Делаю вот так
destructor TFrameReportByMonth.Destroy;
begin
if DataModuleMain<>nil then
if DataModuleMain.OraQueryMonthes<>nil then
DataModuleMain.OraQueryMonthes.Active := false;
OpExcelRep.Visible := false;
OpExcelRep.Connected := false;
inherited Destroy;
end;
Всё равно AV
---
Жук - наш президент
← →
GuAV © (2004-08-09 15:04) [5]
> DataModuleMain.OraQueryMonthes.Active := false;
with DataModuleMain do
OraQueryMonthes.Active := false;
имхо будет понятнее что [1]
Попробую применить телепатию: OraQueryMonthes уже уничтожен на момент вызова деструктора.
← →
GuAV © (2004-08-09 15:06) [6]
> if DataModuleMain<>nil then
> if DataModuleMain.OraQueryMonthes<>nil then
OraQueryMonthes уничтожен, но никто его не обниливал
← →
Гаврила © (2004-08-09 15:06) [7]в этот момент DataModuleMain уже разрушен
← →
Anatoly Podgoretsky © (2004-08-09 15:06) [8]Проверка на nil не означает, что они имеют допустимое значение.
← →
}|{yk © (2004-08-09 15:06) [9]>Не должен фрейм обращаться к датамодулям.
Да ну? Вот это прикол. С какой такой радости?
---
Жук - наш президент
← →
Гаврила © (2004-08-09 15:09) [10]
> >Не должен фрейм обращаться к датамодулям.
>
> Да ну? Вот это прикол. С какой такой радости?
Обращаться может. Но не должен ими управлять, как то создавать \ разрушать объекты, устанавливать connected
просто Стиль
← →
}|{yk © (2004-08-09 15:11) [11]А как узнать, имеет ли модуль данных допустимое значение? Потому как ошибка возникает при закрытии приложения. Т.е. м.д. уже уничтожен, но не равен nil
← →
GuAV © (2004-08-09 15:11) [12]Если OraQueryMonthes и TFrameReportByMonth вставлені в одну форму, то трудно сделать какие либо предположения, кого убьют первым (по крайней мере мне трудно).
---
GuAV - наш Жук
← →
Sandman25 © (2004-08-09 15:12) [13][9] }|{yk © (09.08.04 15:06)
Из описания паттерна "Слабое связывание"
Проблема
Как обеспечить зависимость, незначительное влияние изменений и повысить возможность повторного использования?
Степень связанности (coupling) — это мера, определяющая насколько жестко один элемент связан с другими элементами, либо каким количеством данных о других элементах он обладает. Элемент с низкой степенью связанности (или слабым связыванием) зависит от не очень большого числа других элементов. Выражение "очень много" зависит от контекста, однако необходимо провести его оценку.
Класс с высокой степенью связанности (или жестко связанный) зависит от множества других классов. Однако наличие таких классов нежелательно, поскольку оно приводит к возникновению следующих проблем.
Изменения в связанных классах приводят к локальным изменениям в данном классе.
Затрудняется понимание каждого класса в отдельности.
Усложняется повторное использование, поскольку для этого требуется дополнительный анализ классов, с которыми связан данный класс.
← →
GuAV © (2004-08-09 15:12) [14]
> форму
дата модуль, то есть
---
GuAV - наш Жук
← →
}|{yk © (2004-08-09 15:14) [15]>Если OraQueryMonthes и TFrameReportByMonth вставлені в одну форму
В какую одну форму? Да у меня вообще одна форма на приложение
← →
}|{yk © (2004-08-09 15:16) [16]2Sandman25
О том, как я я использую фреймы, я сейчас пишу статью. Потом будешь критиковать. Сейчас вопрос в другом. Как узнать, что м.д. не существует?
---
Жук - наш президент
← →
Sandman25 © (2004-08-09 15:17) [17][16] }|{yk © (09.08.04 15:16)
Обнулить переменную, ссылающуюся на него, в том месте, где она уничтожается
← →
Anatoly Podgoretsky © (2004-08-09 15:17) [18]}|{yk © (09.08.04 15:11) [11]
Проводить уничтожение, там где создание, в модуле данных.
Узнать верность указателя нельзя.
← →
Гаврила © (2004-08-09 15:19) [19]Твой Дата модуль наверняка был создан с параметром Owner = Application.
При закрытии приложения сам Application отвечает за разрушение дата модуля. Видимо, это происходит до того ,как ты пытаешься им манипулировать из деструктора фрейма
← →
GuAV © (2004-08-09 15:25) [20]
> Как узнать, что м.д. не существует?
попробуй FreeNotification method (TComponent)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c