передача отчету строки коннекта

отредактировано August 2007 Раздел: FastReport Studio
Это мой код:

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();

Открывается отчет с пустой строкой коннекта... м.б. я что-то упускаю...
Подскажите, пожалуйста.

Комментарии

  • отредактировано 04:26
    Вроде разобрался. В отчет строку коннекта передавать надо наверное так:

    IfrxReportPtr pReport(__uuidof(TfrxReport));
    IfrxReportOptionsPtr pOp(__uuidof(TfrxReportOptions));

    pOp->ConnectionName=strDataSource; //строка коннекта

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

    pReport->ShowReport();

    Но при объявлении IfrxReportOptionsPtr pOp(__uuidof(TfrxReportOptions)); программа вылетает с ошибкой "класс не зарегистриронан"

    В чем ошибка? Может кто подскажет?
  • almanalman космополит
    отредактировано 04:26
    deff написал: »
    Вроде разобрался. В отчет строку коннекта передавать надо наверное так:

    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;

  • отредактировано 04:26
    alman написал: »
    Я не проверял, но возможно сработает такой вариант

    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();

    Может я что-то упускаю?
  • almanalman космополит
    отредактировано 04:26
    deff написал: »
    Да, так сработало. Но в отчет строка коннекта так и не передается....

    Мой код:
    IfrxReportPtr pReport(__uuidof(TfrxReport));
    IfrxReportOptionsPtr pOp = pReport->ReportOptions;

    pOp->ConnectionName=strDataSource;
    pReport->LoadReportFromFile("kassa.fr3");
    pReport->ShowReport();

    Может я что-то упускаю?

    Ах да. Свойство ConectionName - Это имя коннекшена по умалчанию. На его основе из ветки регистра выбирается строка соединия. Т.е. в дизайнере отчётов, который поставляется вместе со студией, Вы можете создать соединение по умалчанию.

    Если же Вы желаете задать строку соединения непосредственно, то необходимо использовать следующий приём:

    1. Загрузить отчёт.
    2. Найти объект TfrxADODatabase по его имени.
    3. У найденного объекта задать свойство ConnectionString.
  • отредактировано August 2007
    alman написал: »
    Если же Вы желаете задать строку соединения непосредственно, то необходимо использовать следующий приём:

    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
    Соединение с БД проходит успешно.
    Дальше непонятно что делать. В примерах такого не нашел...
  • отредактировано 04:26
    Вообще я предполагаю, что в ADOQuery свойству Database нужно присвоить строку коннекта...
    Но как это сделать не могу разобраться...
  • almanalman космополит
    отредактировано 04:26
    deff написал: »
    Что-то Вы меня совсем запутали... :)
    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.

  • отредактировано 04:26
    alman написал: »
    Ежели Вы собираетесь создавать 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 или нет?

    После этого загружаю отчет...не работает...
  • отредактировано 04:26
    Загружайте отчет ПЕРЕД этим.
  • FokewolfFokewolf Киев
    отредактировано 04:26
    написал:
    Ах да. Свойство ConectionName - Это имя коннекшена по умалчанию. На его основе из ветки регистра выбирается строка соединия. Т.е. в дизайнере отчётов, который поставляется вместе со студией, Вы можете создать соединение по умалчанию.
    Так стоп,так а как по умолчанию то создать соединение?

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

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