привязка набора данных к MasterData

отредактировано 04:04 Раздел: FastReport 3.0
Не могу получить доступ к MasterData из программы. Пишу так:
IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase));
IfrxADOTablePtr pDT(__uuidof(TfrxADOTable));
IfrxADOQueryPtr pQR(__uuidof(TfrxADOQuery));
IfrxReportPtr pReport(__uuidof(TfrxReport));

/подкл-е к базе
pDB->ConnectionString = strDS;
pDB->LoginPrompt = false;
pDB->Connected = true;

//обращ-е к таблице
pDT->DataBase = pDB;
pDT->Name = "ADOTable";
pDT->TableName = "TestTable";

pReport->LoadReportFromFile("10.fr3");

pReport->SelectDataset(true,pDT);

А как мне теперь программно задать в MasterData1 ссылку на этот ADOTable?
Че-то у меня не получается.
Почему не срабатывает pReport->FindObject('MasterData1'));
Ошибка выдает, что FindObject не является членом TfrxReport/

Комментарии

  • отредактировано 04:04
    Пожалуйста, кто-нибудь помогите.
    Ведь совсем не получается обратиться к свойствам MasterData из C++.Как это сделать? Как присвоить этому DataSet в MasterData динамически свою таблицу ADOTable?????
    Если бы можно было по умолчанию поставить нужное имя таблицы для MasterData в дизайнере, а потом только динамически ее подключить.... Но этого же нет, поле не позволяет этого.
  • отредактировано 04:04
    И почему я не могу обратиться к определенной странице отчета в си? В делфях же это можно сделать - pReport.Pages[0]. А почему нет п си такого свойства?
  • отредактировано 04:04
    пробовала через скрипт значение DataSet указать:
    pReport->PutScriptText("void MasterData1OnMasterDetail(TfrxComponent Sender){MasterData1.DataSet=ADOTable1;}{}");
    так ругается, что необъявлен ADOTable, хотя он уже подключен. Как-то тоже чудно слишком.

    Все-таки лучшим решением проблемы было бы наличие у свойства DataSet в MasterData1 и остальных объектах возможности не только выбирать значение, но и писать свое. Как в Memo написал сначала, а потом после динамического подключения все отображается.

    УФ! Запарилась я уже!!
  • almanalman космополит
    отредактировано 04:04
    В сегодняшнем билде добавился новый интерфейс IfrxDataBand - у него есть свойство DataSet. Пример пока не успел написать, т.ч. попробую выложить его сюда.
  • almanalman космополит
    отредактировано 04:04
    Buka написал:
    А как мне теперь программно задать в MasterData1 ссылку на этот ADOTable?
    Че-то у меня не получается.
    Почему не срабатывает pReport->FindObject('MasterData1'));
    Ошибка выдает, что FindObject не является членом TfrxReport/
    Вы на правильном пути. Вот пример, должен работать, правда, в деле его ещё не проверял.

    HRESULT  	hr;
    	
    	IfrxReportPtr pReport(__uuidof(TfrxReport));
    	IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase));
    	IfrxADOTablePtr pDT(__uuidof(TfrxADOTable));
    	IfrxADOQueryPtr pQR(__uuidof(TfrxADOQuery));
    
    	pDB->ConnectionString = strConnection;
    	pDB->LoginPrompt = false;
    	pDB->Connected = true;
     
    	pDT->DataBase = pDB;
    	pDT->Name = "ADOTable";
    	pDT->TableName = "TestTable";
    
    	pReport->LoadReportFromFile("10.fr3");
     
    	pReport->SelectDataset(true,pDT);
    
    	IfrxComponent* pComponent;
    	IfrxDataBand* pDataBand;
    	IfrxComponent* pMasterData1;
    	IfrxDataSet	*	pMasterDataSet;
                     
    
    	pReport->QueryInterface(__uuidof(IfrxComponent), (void**) &pComponent);
    	hr=pComponent->FindObject(_bstr_t("MasterData1"), &pMasterData1);
    	pComponent->Release();
    
    
    	pMasterData1->QueryInterface(__uuidof(IfrxDataBand), (void**) &pDataBand);
    
    	pQR->DataBase = pDB;
    	pQR->Name = "My SQL Query";
    	pQR->Query = "select * from sometable";
    
    	pQR->QueryInterface(__uuidof(IfrxDataSet), (void**) &pMasterDataSet);
    
    
    	pDataBand->DataSet = pMasterDataSet;
    
    

    Приблизительно так. Конечно тут без проверок, поэтому если Masterdata1 не будет найдена, то получится Access violation

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

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