Динамическое создание Tfrxxx в собственном классе
Вкратце, суть задачи:
Есть класс, унаследованный от TComponent.
Я создаю в конструкторе этого класса TfrReport и всю инфраструктуру, указывая экземпляр класса в качестве Owner.
Все создается и отрабатывает замечательно, пока не требуется указать источник данных для бэнда.
В списке источников остается только "нет" и "Virtual", хотя TfrDataset мной создается и настраивается.
Более того, если положить TfrDataset на форму, а при создании экземпляра класса указать форму как Owner, то TfrDataset появится в этом списке!
Я могу лишь предположить, что движок FR при поиске потенциальных источников идет вверх по иерархии владельцев, пока не найдет потомка TForm, и ищет свои TfrDataset уже среди его компонентов.
Как можно разрешить эту ситуацию, если вытаскивать TfrDataset из класса наружу крайне нежелательно?
Потребуется ли модифицировать код FreeReport, или же можно обойтись без кардинальных мер?
выдержка из кода конструктора класса - создание компонентов
Есть класс, унаследованный от TComponent.
Я создаю в конструкторе этого класса TfrReport и всю инфраструктуру, указывая экземпляр класса в качестве Owner.
Все создается и отрабатывает замечательно, пока не требуется указать источник данных для бэнда.
В списке источников остается только "нет" и "Virtual", хотя TfrDataset мной создается и настраивается.
Более того, если положить TfrDataset на форму, а при создании экземпляра класса указать форму как Owner, то TfrDataset появится в этом списке!
Я могу лишь предположить, что движок FR при поиске потенциальных источников идет вверх по иерархии владельцев, пока не найдет потомка TForm, и ищет свои TfrDataset уже среди его компонентов.
Как можно разрешить эту ситуацию, если вытаскивать TfrDataset из класса наружу крайне нежелательно?
Потребуется ли модифицировать код FreeReport, или же можно обойтись без кардинальных мер?
выдержка из кода конструктора класса - создание компонентов
//создаем основные компоненты
Query = new TADOQuery(this);//запрос к БД
QSource = new TDataSource(this);//посредник
ReportDataset = new TfrDBDataSet(this);//источник данных отчета
Report = new TfrReport(this);//отчет
//настройка "пищевой цепочки"
Query->Connection = Conn; //TADOConnection* Conn передается в параметрах конструктора
QSource->DataSet = Query; //работаем через посредника
ReportDataset->DataSource = QSource;
Report->Dataset = ReportDataset; //устанавливаем источник
//далее идет создание вспомогательных компонент - TfrXXXXObject
Комментарии
Topic closed.