На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Подключение базы данных в отчете FastReport через Builder
    Заранее прошу извинения, поскольку в FastReport еще не специалист. Но довольно-таки сложный отчет сделала. А вот на программном подключении отчета через Builder споткнулась. Хотя прошерстила все справки по FR: там почему-то все одно и то же и очень сжато.
    Во-первых, не смогла понять, подключение делается через переменную или в самом коде отчета?
    Пыталась просто в коде FR явно прописать путь к БД, чтобы понять принцип подключения.

    ExpandedWrap disabled
      uses frxIBXComponents
      var IBX_BD: TfrxIBXDatabase;
       
      procedure FR_CatOnStartReport(Sender: TfrxComponent);
      begin
      IBX_BD.DatabaseName := 'D:\BUILDER\BD.GDB';
      IBX_BD.Connected :=true;                                        
      end;


    Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses.
    Отключаю эту строку, пишет, что не определен компонент IBX_BD. Но я же его объявляю?
    Если через переменную в FR, то как ее связать со строкой подключения?
    В общем, пока у меня "темный лес".
    Естественно, БД подключила в самом компоненте отчета TfrxIBXDatabase IBX_BD. Но на другом компьютере путь нужно менять. Не красиво как-то это...
    Помогите, пожалуйста! Уже несколько дней сижу безрезультатно.
      Насчёт FR не скажу. Для Rave Reports в него подсовывается результат запроса, но никак не коннект на БД. ИМХО - в твоём случае должно быть то же самое. Любой Репорт - это всего-навсего аналог DBGrid.
      ЗЫ - пишешь про Билдер, а код - на паскале :D .
        В компонент frxIBXDatabase DataSet не засунешь. Там такого свойства нет
        Пока крутится мысль через Find Object, но еще не знаю, как реализовать.
        Странно, что никто не отвечает: или это неприличный вопрос? - хотя репорты имеют свои отличия от работы в Билдере... 8-)
        Думаю, что то, что я прочитала за это время о работе в FR, еще не сложилось "в одной ячейке".
          Цитата laifik @
          Заранее прошу извинения, поскольку в FastReport еще не специалист. Но довольно-таки сложный отчет сделала. А вот на программном подключении отчета через Builder споткнулась. Хотя прошерстила все справки по FR: там почему-то все одно и то же и очень сжато.
          Во-первых, не смогла понять, подключение делается через переменную или в самом коде отчета?
          Пыталась просто в коде FR явно прописать путь к БД, чтобы понять принцип подключения.

          ExpandedWrap disabled
            uses frxIBXComponents
            var IBX_BD: TfrxIBXDatabase;
             
            procedure FR_CatOnStartReport(Sender: TfrxComponent);
            begin
            IBX_BD.DatabaseName := 'D:\BUILDER\BD.GDB';
            IBX_BD.Connected :=true;                                        
            end;


          Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses.
          Отключаю эту строку, пишет, что не определен компонент IBX_BD. Но я же его объявляю?
          Если через переменную в FR, то как ее связать со строкой подключения?
          В общем, пока у меня "темный лес".
          Естественно, БД подключила в самом компоненте отчета TfrxIBXDatabase IBX_BD. Но на другом компьютере путь нужно менять. Не красиво как-то это...
          Помогите, пожалуйста! Уже несколько дней сижу безрезультатно.

          Это не коммерческий код вот и не компелируецца. Используйте компелятор до 2006 года выпуска, они ещё не умеют распознавать коммерческий код.
            Цитата laifik @
            Но на другом компьютере путь нужно менять. Не красиво как-то это...

            Можно путь держать в .ini файле или в реестре.
              А можно и так - я все-таки права была насчет FindObject! :)
              Мой очень умный друг и программист написал код на Делфи. Я лишь перевела на язык Си. Может этот код еще кому-нибудь понадобится...

              ExpandedWrap disabled
                SetRptConnectionString(FR, “IBX_CON”, IBCONNECT->DatabaseName);
                       FR->ShowReport();
                 
                .cpp
                //-------------------------
                Void SetRptConnectionString(TfrxReport *rpt, AnsiString DBName, AnsiString ConnStr) //функция динамического подключения к БД
                {
                      TfrxIBXDatabase *db = dynamic_cast < TfrxIBXDatabase *> (prt->FindObject(DBName));
                         If (db != NULL)
                       {
                         If(db->Connected == true) db->Connected = false;
                         db->DatabaseName = ConnStr;
                       }
                }
                //------------------------
                .h
                public:  //User declarations
                    SetRptConnectionString(TfrxReport *rpt, AnsiString DBName, AnsiString ConnStr);


              Может вылезти такая ошибка:
              ExpandedWrap disabled
                Unresolved external ‘TForm1:: SetRptConnectionString(Frxclass::FrxReport*, System AnsiString’ referenced from ‘D\Form1.obj’


              Нужно просто правильно объявить функцию (найти место) SetRptConnectionString.
              FR- отчет FastReport;
              IBX_CON - название компонента TfrxIBXDatabase в отчете;
              IBCONNECT - название компонента TIBDatabase в программе Builder
              Большое спасибо, что пытались помочь. Мысли потекли в правильном направлении.
              Через ini, конечно, можно. Но все равно нужен был для подключения этот код.
              Сообщение отредактировано: laifik -
                Цитата laifik @
                А можно и так - я все-таки права была насчет FindObject!
                Мой очень умный друг и программист написал код на Делфи. Я лишь перевела на язык Си. Может этот код еще кому-нибудь понадобится...


                Спасибо, пригодилось! :rolleyes:

                На Delphi сделал так:

                1. frxReport1 - вкладка Data - Свойства:
                ExpandedWrap disabled
                    IBXDatabase1.DatabaseName := '';
                    IBXDatabase1.Connected := false;

                2. Положил на форму рядом с frxReport1 компонент frxIBXComponents1
                3. В событии OnCreate формы добавил код:
                ExpandedWrap disabled
                   (frxReport1.FindComponent('IBXDatabase1') as TfrxIBXDatabase).DatabaseName := MyDatabaseName;
                   (frxReport1.FindComponent('IBXDatabase1') as TfrxIBXDatabase).Connected := true;

                Всё работает.

                P.S. У меня FastReport 5.0
                Сообщение отредактировано: Oldgreen -
                  Цитата laifik @
                  Не компелируется. Внизу сообщение "Identifier expected" и курсор стоит на строке uses

                  Элементарно, просто пропущена точка с запятой в конце этой строки.
                  Цитата skrambun @
                  Это не коммерческий код вот и не компелируецца.

                  бред.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0328 ]   [ 16 queries used ]   [ Generated: 28.03.24, 19:02 GMT ]