Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2011, 23:34   #1
Nik_K
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 14
По умолчанию Возникает ошибка исключения при повторном открытии формы

Ситуация: Приложение Delphi 7 подключена к БД Access.
При тестировании приложения по F8 ошибок 0. Через F9 открывается главная форма - нормально. Через меню главной формы открываю модально другую форму - нормально.
Закрываю модальную форму - нормально. При повторном открытии этой модальной формы возникает ошибка исключения. Скрины прилагаю. Кто мучился с данной проблемой? Как можно её решить?
Вложения
Тип файла: doc Исключ_Рис_1.doc (91.0 Кб, 23 просмотров)
Тип файла: doc Исключ_Рис_2.doc (400.5 Кб, 20 просмотров)
Nik_K вне форума Ответить с цитированием
Старый 23.04.2011, 00:08   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Похоже вы стучитесь к свойству (или переменной) формы, для которой раньше был выполнен метод Free
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.04.2011, 18:33   #3
Nik_K
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 14
По умолчанию

А делать то что надо? Чтобы стучаться куда надо.
Nik_K вне форума Ответить с цитированием
Старый 23.04.2011, 23:32   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Делайте для модального вызова без всяких предварительных проверок примерно так
Код:
FormSprStrana:=TFormSprStrana.Create(Application);
try
  FormSprStrana.ShowModal;
finally
  FormSprStrana.Free;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.04.2011, 16:43   #5
Nik_K
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 14
По умолчанию

Закоментировал запись так:
Код:
Код:
procedure TGlavForm.MenSprStranaClick(Sender: TObject);
  begin
   //if FormSprStrana.Active then Close();
     FormSprStrana := TformSprStrana.Create(Owner);
      FormSprStrana.ShowModal;
       FormSprStrana.Free;
  end;
Получилось. Только непонятно, чем закоментированная запись не нравится Delphi (или ОС)?
Но Ваш код мне показался изящнее.
Интересно, много таких, которые эспериментируют от большого ума и неистребимого желания узнать: "что будет, если сделать так"?

Последний раз редактировалось Stilet; 24.04.2011 в 17:45.
Nik_K вне форума Ответить с цитированием
Старый 24.04.2011, 17:40   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Как вы полагаете какую форму вы закрываете Close;
Цитата:
//if FormSprStrana.Active then Close();
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.04.2011, 19:06   #7
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

А что у вас формы не создаются автоматически?
Было бы достаточно только
Код:
FormSprStrana.ShowModal;
для показа формы

Последний раз редактировалось Gulik; 24.04.2011 в 19:10.
Gulik вне форума Ответить с цитированием
Старый 25.04.2011, 09:17   #8
Nik_K
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 14
По умолчанию

Полагаю, что это проверка типа, "если эта форма открыта, то сначала её надо закрыть". Могу оказаться и неправ.
Nik_K вне форума Ответить с цитированием
Старый 25.04.2011, 09:30   #9
Nik_K
Пользователь
 
Регистрация: 04.02.2007
Сообщений: 14
По умолчанию

Формы в опциях этого проекта Delphi стояли в avto-create, потом перекинул в avialable. С выводом форм приложения ничего не изменилось.
Мой гуру М.Фленов, поэтому по его "Библии" я добавляю строки в код. Возможно выходит "масло маслянное". Но принципиально не догоняю, почему не хочет восприниматься (скорее всего системой, ведь Delphi на это при проверке на ошибки не реагирует) проверка "Если форма активна, тогда закрыть"
Nik_K вне форума Ответить с цитированием
Старый 25.04.2011, 13:09   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Я не просто так спросил
Цитата:
Как вы полагаете какую форму вы закрываете Close;
Разберем по строчкам что делается.
1.
Цитата:
if FormSprStrana.Active then Close();
Инициализируете закрытие не чего-нибудь а ГЛАВНОЙ формы.
Упоминание метода БЕЗ префикса относится к настоящему объекту(т.е здесь это будет главная форма)
а при закрытии главной формы закрывается ВСЕ приложение.
2.
Цитата:
FormSprStrana := TformSprStrana.Create(Owner);
Владельцем новой форму указ владелец главной формы(приложение).
создаете новую форму которая будет уничтожена вместе владельцем главной формы(приложением).
3.
Цитата:
FormSprStrana.ShowModal;
для показа нашей формы запускам цикл обработки сообщений.
Где ВНИМАНИЕ! происходит УНИЧТОЖЕНИЕ(см. П1) главной формы приложения как объекта ООП, и всех подчиненных ему объектов, в т.ч. вновь созданной формы.
КОД программы ПРОДОЛЖАЕТ работать.
3.
Цитата:
FormSprStrana.Free;
пытаемся удалить уже удаленное. (см п3) результат AV.

комментарий на строку включающую close отменяет закрытие главной формы, проложения и т.д. В результате все хорошо.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.04.2011 в 13:14.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение, введенного пользователем, значения в поле TextBox, при повторном вызове формы Denis Ch Microsoft Office Excel 28 02.02.2012 01:12
При закрытии Word возникает ошибка sewer777 Microsoft Office Word 3 20.10.2011 13:19
при открытии Recordset'a возникает переполнение стека MrGB Microsoft Office Access 3 16.11.2010 20:15
Ошибка sql запроса при открытии формы R Dmitry Microsoft Office Access 0 08.07.2010 02:04
При открытии двойным щелчком раздела возникает ошибка( DEMONENOC Операционные системы общие вопросы 3 30.06.2009 05:02