Написать движок БД (Билдер)

отредактировано March 2011 Раздел: FastReport 4.0
Хочу написать собственный движок БД для ADS сервера.
Возникла проблема при написанни компонента 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. Если написать на делфи (как у вас в хелпе), то все работает

Комментарии

  • отредактировано March 2011
    ОЧЕНЬ прошу поддержки SUPPORT.
    Понимаю, что на делфи пишете, но хотелось бы получить решение на билдере.
    Обращался на форумы по С++, так там ничего конкретного не сказали.....

    Может дело в inherited? В С++ такого нет, вызываю конструктор базового класса так:
    __fastcall TfrxAdsQuery::TfrxAdsQuery(TComponent* AOwner)
          : TfrxCustomQuery(AOwner) {//код}
    
    По-другому незнаю.
    Хочу написАть на билдере, потому-что вся программа на нем написана и мне лучше менять что-то в проекте чем наново компилировать *.bpl
    Если не получится то значит этот класс придется написать на делфи, хотя с++ я лучше знаю.
  • отредактировано 17:18
    Ладно, раз никто помочь не хочет, буду писАть на делфи этот кусок. Может и компоненту сделаю, тогда вам выложу.

    З.Ы. Ни билдере не получится, так как конструктор базового класса вызывается в начале и, наверное, ничем это не исправишь,
    разве что влезать в исходники ФР и подстраивать конструктор под себя. ИМХО, лучше уже на делфи сделать, заодно мож и комусь пригодится, мне не жалко )))))

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.