Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
1-1091687216
Loki3D
2004-08-05 10:26
2004.08.22
создание отчета


4-1089626855
Help
2004-07-12 14:07
2004.08.22
Проблема с свойством "Stay On Top"


1-1091946029
k-sergey
2004-08-08 10:20
2004.08.22
ListBox1MouseUp как узнать на каком items кликнули ?


1-1091801436
Леонид Федьков
2004-08-06 18:10
2004.08.22
Передача HTML-страницы в TWebBrowser через TOleStream


4-1089638165
BillyJeans
2004-07-12 17:16
2004.08.22
Функция преобразования имени файла...