Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при закрытии многооконного приложения 
:(
    Опции темы
php5
Дата 14.1.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Есть многооконного приложения для роботы с БД
Когда открывается окно при событии FormActivate происходит загрузка данных с БД
Код

AnsiString  sql="запрос ";
IBQuery1->Close();
IBQuery1->SQL->Clear();
IBQuery1->SQL->Add(sql);
IBQuery1->Open();

Так вот если открыть таких окон 2 и больше то при закрытии окна происходит ошибка (Смотри прикрепленный файл )

в обработчике события FormActivate 
Как это лечить ? 

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  error.JPG 21,69 Kb
PM MAIL   Вверх
artsb
Дата 15.1.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



А больше в FormActivate ничего нет? Просто при закрытии формы активируется предыдущая и происходит это событие опять. Может лучше операторы из него перенести в OnShow()?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Mpak
Дата 15.1.2009, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 12.11.2006

Репутация: 4
Всего: 7



OnShow() вроде тоже срабатывает при переключении окон..
если требуется один раз в форму подгрузить данные из БД, то может стоит использовать событие OnCreate()?


--------------------
В любой откомпилированной программе есть, по крайней мере, одна ошибка...
P.S. А у меня их минимум две...
PM MAIL ICQ   Вверх
Dem_max
Дата 15.1.2009, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Да лучше в OnCreate.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
php5
Дата 15.1.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Эта ошибка явно не связана с БД т.к она происходит если   в этом событии  делать  Form->Caption="Form";
PM MAIL   Вверх
orthrus
Дата 15.1.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 4
Всего: 16



Событие FormClose обрабатывается?

Добавлено через 2 минуты и 58 секунд
И вообще приведи сюда весь код этого класса, а то ясновидящие и экстрасенсы в отпуске.


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
php5
Дата 15.1.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



код прост, для FormStyle  стаит fsMDIChild     
Код

#include <vcl.h>
#pragma hdrstop

#include "myForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

#pragma resource "*.dfm"
TForm8 *Form8;
//---------------------------------------------------------------------------
__fastcall TForm8::TForm8(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm8::FormClose(TObject *Sender, TCloseAction &Action)
{
Action=caFree;
}
//---------------------------------------------------------------------------

void __fastcall TForm8::FormActivate(TObject *Sender)
{
  Form8->Caption="Form";
}
//---------------------------------------------------------------------------



Это сообщение отредактировал(а) php5 - 15.1.2009, 12:08
PM MAIL   Вверх
mrbrooks
Дата 15.1.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(php5 @  14.1.2009,  20:20 Найти цитируемый пост)
Так вот если открыть таких окон 2 и больше то при закрытии окна происходит ошибка (Смотри прикрепленный файл )

это что - выходит несколько окон работают с одной БД?
PM MAIL   Вверх
xvr
Дата 15.1.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



В порядке эксперимента, замени 
Код

void __fastcall TForm8::FormActivate(TObject *Sender)
{
  Form8->Caption="Form";
}

на
Код

void __fastcall TForm8::FormActivate(TObject *Sender)
{
  Caption="Form";
}

PM MAIL   Вверх
artsb
Дата 15.1.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Mpak @  15.1.2009,  05:16 Найти цитируемый пост)
OnShow() вроде тоже срабатывает при переключении окон..

Разве?..


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
php5
Дата 15.1.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



О  xvr,  вроде  помогло , а в чем прикол ?  smile 
кстати при переключении окон OnShow не срабатывает 


PM MAIL   Вверх
artsb
Дата 15.1.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(php5 @  15.1.2009,  13:37 Найти цитируемый пост)
кстати при переключении окон OnShow не срабатывает

Ну хоть в чём-то я прав smile

Добавлено @ 14:15
Цитата(php5 @  15.1.2009,  13:37 Найти цитируемый пост)
а в чем прикол ?

А как вы формы создаёте?
У них разные имена?

Вы видать пытаетесь обратиться не к текущей форме, а к Form8. 
Посмотрите имена разных форм. Например так:
Код

// в OnShow() формы
ShowMessage(Name);


Это сообщение отредактировал(а) artsb - 15.1.2009, 14:23


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
php5
Дата 15.1.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Да наверное весь прикол в создании формы, я их создаю   так :
Application->CreateForm(__classid(TForm8), &Form8);
 Form8->Show();

Т.е у всех экземпляров одно и тоже имя 

PM MAIL   Вверх
xvr
Дата 15.1.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(php5 @ 15.1.2009,  13:37)
О  xvr,  вроде  помогло , а в чем прикол ?  smile 

Никакого прикола, голая правда жизни  smile Переменная Form8 указывает на автоматически создаваемый при старте программы экземпляр формы. При закрытии/уничтожении формы (из за Action=caFree; в FormClose) собственно форма уничтожается, а переменная Form8 начинает указывать на мусор, оставшийся от уничтоженной формы. При следующей попытке через нее что то позвать программа падает.

PM MAIL   Вверх
Vyacheslav
Дата 15.1.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(php5 @  15.1.2009,  14:26 Найти цитируемый пост)
Да наверное весь прикол в создании формы, я их создаю   так :
Application->CreateForm(__classid(TForm8), &Form8);
 Form8->Show();

Т.е у всех экземпляров одно и тоже имя 


Можно вопрос.
А чего Вы за этот  CreateForm уцепились?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.