Написать движок БД (Билдер)
Хочу написать собственный движок БД для ADS сервера.
Возникла проблема при написанни компонента Query (c Table проблем нет)
*.h
*.cpp
Так вот, проблема в дизайнере отчета: компонент появился в палитре, но при попытке вставить его в отчет получаю AV.
Конструктор не вызывается вообще (специально туда ShowMessage засунул). Ощущение такое, что не вызывается конструктор базового класса, ИМХО.
Но если наследоватся от TfrxCustomDataSet то все нормально работает, но в таком случае много велосипедов надо изобретать.
Повторюсь, что з TfrxAdsTable такой проблемы нет.
P.S. Если написать на делфи (как у вас в хелпе), то все работает
Возникла проблема при написанни компонента Query (c Table проблем нет)
*.h
class TfrxAdsQuery : public TfrxCustomQuery
{
private:
TfrxAdsConnection* FAdsConnection;
TAdsQuery* FAdsQuery;
void __fastcall SetDatabase(TfrxAdsConnection* Value);
protected:
virtual void __fastcall Notification(TComponent* AComponent, TOperation Operation);
//virtual void __fastcall SetMaster(TDataSource* Value);
virtual void __fastcall SetSQL(TStrings* Value);
virtual TStrings* __fastcall GetSQL(void);
public:
__fastcall virtual TfrxAdsQuery(TComponent* AOwner);
__fastcall virtual TfrxAdsQuery(TComponent* AOwner, unsigned short Flags);
virtual void __fastcall BeforeStartReport(void);
virtual void __fastcall UpdateParams(void);
__property TAdsQuery* Query = {read=FAdsQuery};
__published:
__property TfrxAdsConnection* AdsConnection = {read=FAdsConnection, write=SetDatabase};
public:
};
*.cpp
__fastcall TfrxAdsQuery::TfrxAdsQuery(TComponent* AOwner)
: TfrxCustomQuery(AOwner)
{
ShowMessage("create");
FAdsQuery = new TAdsQuery(0);
DataSet = FAdsQuery;
SetDatabase(NULL);
}
// ---------------------------------------------------------------------------
__fastcall TfrxAdsQuery::TfrxAdsQuery(TComponent* AOwner, unsigned short Flags)
: TfrxCustomQuery(AOwner)
{
нужный код
}
Так вот, проблема в дизайнере отчета: компонент появился в палитре, но при попытке вставить его в отчет получаю AV.
Конструктор не вызывается вообще (специально туда ShowMessage засунул). Ощущение такое, что не вызывается конструктор базового класса, ИМХО.
Но если наследоватся от TfrxCustomDataSet то все нормально работает, но в таком случае много велосипедов надо изобретать.
Повторюсь, что з TfrxAdsTable такой проблемы нет.
P.S. Если написать на делфи (как у вас в хелпе), то все работает
Комментарии
Понимаю, что на делфи пишете, но хотелось бы получить решение на билдере.
Обращался на форумы по С++, так там ничего конкретного не сказали.....
Может дело в inherited? В С++ такого нет, вызываю конструктор базового класса так: По-другому незнаю.
Хочу написАть на билдере, потому-что вся программа на нем написана и мне лучше менять что-то в проекте чем наново компилировать *.bpl
Если не получится то значит этот класс придется написать на делфи, хотя с++ я лучше знаю.
З.Ы. Ни билдере не получится, так как конструктор базового класса вызывается в начале и, наверное, ничем это не исправишь,
разве что влезать в исходники ФР и подстраивать конструктор под себя. ИМХО, лучше уже на делфи сделать, заодно мож и комусь пригодится, мне не жалко )))))