передача отчету строки коннекта
Это мой код:
IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase));
IfrxADOTablePtr pDT(__uuidof(TfrxADOTable));
IfrxADOQueryPtr pQR(__uuidof(TfrxADOQuery));
IfrxReportPtr pReport(__uuidof(TfrxReport));
pDB->ConnectionString = strDataSource;
pDB->LoginPrompt = false;
pDB->Connected = true;
pDT->DataBase = pDB;
pQR->DataBase = pDB;
pReport->DesignReport();
Открывается отчет с пустой строкой коннекта... м.б. я что-то упускаю...
Подскажите, пожалуйста.
IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase));
IfrxADOTablePtr pDT(__uuidof(TfrxADOTable));
IfrxADOQueryPtr pQR(__uuidof(TfrxADOQuery));
IfrxReportPtr pReport(__uuidof(TfrxReport));
pDB->ConnectionString = strDataSource;
pDB->LoginPrompt = false;
pDB->Connected = true;
pDT->DataBase = pDB;
pQR->DataBase = pDB;
pReport->DesignReport();
Открывается отчет с пустой строкой коннекта... м.б. я что-то упускаю...
Подскажите, пожалуйста.
Комментарии
IfrxReportPtr pReport(__uuidof(TfrxReport));
IfrxReportOptionsPtr pOp(__uuidof(TfrxReportOptions));
pOp->ConnectionName=strDataSource; //строка коннекта
pReport->LoadReportFromFile("kassa.fr3");
pReport->ShowReport();
Но при объявлении IfrxReportOptionsPtr pOp(__uuidof(TfrxReportOptions)); программа вылетает с ошибкой "класс не зарегистриронан"
В чем ошибка? Может кто подскажет?
Я не проверял, но возможно сработает такой вариант
IfrxReportPtr pReport(__uuidof(TfrxReport));
IfrxReportOptionsPtr pOp = pReport->ReportOptions;
Да, так сработало. Но в отчет строка коннекта так и не передается....
Мой код:
IfrxReportPtr pReport(__uuidof(TfrxReport));
IfrxReportOptionsPtr pOp = pReport->ReportOptions;
pOp->ConnectionName=strDataSource;
pReport->LoadReportFromFile("kassa.fr3");
pReport->ShowReport();
Может я что-то упускаю?
Ах да. Свойство ConectionName - Это имя коннекшена по умалчанию. На его основе из ветки регистра выбирается строка соединия. Т.е. в дизайнере отчётов, который поставляется вместе со студией, Вы можете создать соединение по умалчанию.
Если же Вы желаете задать строку соединения непосредственно, то необходимо использовать следующий приём:
1. Загрузить отчёт.
2. Найти объект TfrxADODatabase по его имени.
3. У найденного объекта задать свойство ConnectionString.
Что-то Вы меня совсем запутали...
1. Загрузить отчёт.
pReport->LoadReportFromFile("kassa.fr3");
2. Найти объект TfrxADODatabase по его имени.
Вот здесь немного непонятно ...Я знаю имя БД, пользователя, пароль.
IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase))
pDB->ConnectionString = strDataSource;
pDB->LoginPrompt = false;
pDB->Connected = true
Соединение с БД проходит успешно.
Дальше непонятно что делать. В примерах такого не нашел...
Но как это сделать не могу разобраться...
Вы смешали в кучу два сбособа. Если во время дизайна отчёта Вы поместили в него TfrxADODatabase и таблицы и запросы на него ссылающиеся, то нет необходимости создавать такой объект программно, а необходимо лишь "вытащить" его из отчёта.
Например:
IfrxComponentPtr pComp = pReport.FindObject("ADODatabase1");
IfrxADODatabase * pDB;
pComp->QueryInterface( __uuidof(IfrxADODatabase), &pDB );
В данном случае "ADODatabase1" - должно совпадать с именем TfrxADODatabase в дизайнере.
Далее работаете с pDB так, как если бы Вы создали его программно.
Естественно, всё эти операции необходимо проводить после загрузки отчёта.
Ежели Вы собираетесь создавать IfrxADODatabase программно, то необходимо выполнить несколько дополнительных операций, для привязки IfrxADODatabase к IfrxTable и/или IfrxADOQuery.
Изначально я так и делал. Создал ADO соединение:
IfrxADODatabasePtr pDB(__uuidof(TfrxADODatabase));
IfrxADOTablePtr pDT(__uuidof(TfrxADOTable));
IfrxADOQueryPtr pQR(__uuidof(TfrxADOQuery));
pDB->ConnectionString = strDataSource;
pDB->LoginPrompt = false;
pDB->Connected = true;
pQR->DataBase = pDB; // Это и есть привязка IfrxADODatabase к IfrxADOQuery или нет?
После этого загружаю отчет...не работает...