Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
3-1091010344
Рооо
2004-07-28 14:25
2004.08.22
как показать нормально текстовой файл в DBGrid-e ?


3-1090671591
Dalex
2004-07-24 16:19
2004.08.22
BDE MySql


14-1091463326
Cerberus
2004-08-02 20:15
2004.08.22
Linux под Win


14-1091452821
СатирЪ
2004-08-02 17:20
2004.08.22
Перекодировщик


14-1091692034
GRAND25
2004-08-05 11:47
2004.08.22
Мы тут все отдыхаем, что ли?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский