C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
При работе с DataModule — ошибка при компиляции
Ledenezz
Отправлено: 17.03.2004, 12:47


Не зарегистрирован







Народ, помогите, возникает глупая ошибка, я уже сталкивалась с ней полтора года назад, ну а сейчас уже не помню как разрешила.

В общем дело вот в чем : в DataModule запихнула IBDataBase и IBTranaction, на форму — IBQuery, DataSource, DBGrid. К форме подкючила h-файл DataModul-я.
Теперь все это на меня ругается и кричит, что DataBase not assigned.

Как сию проблему можно побороть?
Admin
Отправлено: 17.03.2004, 14:27


Владимир

Группа: Администратор
Сообщений: 1190



Так ведь 'DataBase not assigned' это не значит не найден.
Посмотрите в компонентах IBTranaction, IBQuery указан
ли правильно этот IBDataBase
Ledenezz
Отправлено: 17.03.2004, 18:09


Не зарегистрирован







Спасибо за участие.
Все было нормально настроено все компоненты.

А решение данный проблемы, нашла в старых пометках — нужно DataModule в Project на первое место перед формой поставить.
Это я где-то еще видела, что по умолчанию если форма первой стоит, от компилятор обращается к форме -> косяки.
olegenty
Отправлено: 18.03.2004, 18:27


Ветеран

Группа: Модератор
Сообщений: 2412



У меня для решения такого вопроса есть событие AfterInit (пользовательское), и его обработчик. Событие посылается главной форме перед
Application->Run();
Форма его обрабатывает, и всё пучком. Это более универсально.
olegenty
Отправлено: 18.03.2004, 18:34


Ветеран

Группа: Модератор
Сообщений: 2412



Объявление:
CODE

#define CM_INIT_COMPLETE (WM_APP + 1000)

//---------------------------------------------------------------------------
class Tfm : public TForm
{
...
protected:
   void __fastcall AfterInitComptete(TMessage &Msg);
BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(CM_INIT_COMPLETE, TMessage, AfterInitComptete);
END_MESSAGE_MAP (TForm)
};


Реализация

CODE

void __fastcall Tfm::AfterInitComptete(TMessage &Msg)
{
... //Инициализирующие действия, в твоём случае, установка ссылок на объекты TDataModule...    
}


Вызов:

CODE

#include "..\Forms\FormMain.h" // у тебя — твой заголовочный файл формы

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
   try
   {
        Application->Initialize();
        Application->CreateForm(__classid(Tfm), &fm); // Создаётся форма
        Application->CreateForm(__classid(Tdm), &dm); // Создаётся TDataModule
       
        SendMessage(fm->Handle, CM_INIT_COMPLETE, 0, 0);

        Application->Run();
   }
   catch (Exception &exception)
   {
        Application->ShowException(&exception);
   }
   catch (...)
   {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
   }
   return 0;
}


Всё просто.
Ledenezz
Отправлено: 19.03.2004, 18:43


Не зарегистрирован







to olegenty :

Спасибо, воспользуюсь вашим советом, чтоб в дальшейшем не сталкиваться с ентим smile.gif

Вернуться в Работа с базами данных в C++Builder