Вопрос Master - Detail - SubDetail + ADOQuery/D7

отредактировано 10:49 Раздел: FastReport 3.0
Здравствуйте уважаемые администраторы этого замечательного сайта а также все не менее уважаемые посетители. У меня такое дело, хочу попробовать сделать отчет с помощью FastReport (3.14). Выборка происходит из связанных таблиц, доступ к данным с помощью компонентов ADO, в Delphi 7.0. Только таблицы не связанны как родительская - дочерняя и компанентом TTable, а выборка происходит посредством запросов, при событии DataChange. Т.е. в принципе все просто и легко.. Но как из этого сделать отчет, не могу дойти.. Компонент TTable (TADOTable) использовать нельзя.. Все сделано на ADOQuery... Я смотрел штаттный пример "Main", там как раз используются TTable ...
Исходный код примера я пристыковал, всего 13 кб., вместе с БД Access (Там есть некоторые пробные данные..)
Картинка примера:
pic00.gif
Картинка БД Access к этому примеру, ее структура..
pic01.gif

Раньше я как делал,
сам формировал
While not ADOQuery.EOF do
 begin
   //
   //тут ещё таких же 2 блока вложенных друг в друга, что не есть гуд :(
   //
  ADOQuery.Next;
 end;
Ну и далее CSV/TXT отчет сформировать не мог...

Помогите плз, в рамках этого примера сделать отчет Master - Detail - SubDetail, заранее благодарю за помощь, если этот вопрос решится, компаненты куплю, ибо это самые лучшие компаненты, которые когда либо я видел, тем более если подойдут под мою задачу..

Комментарии

  • отредактировано 10:49
    написал:
    Только таблицы не связанны как родительская - дочерняя и компанентом TTable, а выборка происходит посредством запросов, при событии DataChange.
    Почему бы не сделать нормальную связку Master-Detail на уровне TADOQuery и не испытывать проблем с FR?
    (исходный код не качается)
  • отредактировано September 2005
    Сори за ссылку, сайт у них видимо файлы не пропускает
    Эта рабочая:
    http://progres.h1.ru/fastreport_master_det...ubdetail_d7.zip

    -=Serg=-
    В моем случае, не знаю как сделать ;) За выходные ещё попробую.
  • LexLex
    отредактировано 10:49
    Я, при использовании TADOStoredProc + MSSQL и отсутсвии возможности реализовать мастер-детеил в хранимой процедуре, делал следующим образом
    в событии AftePrint MasterBand-а фызывал внешнюю функцию с параметром
     -------------------
      if MethodName = 'QUERY2_REFRESH' then 
      begin
        ADOQuery2.Active:=False;
        ADOQuery2.SQL.Text:='SELECT * FROM t2 WHERE id_t1= '+{параметр}+' ';
        ADOQuery2.Active:=True;
      end;
      -------------------
    
    в качестве параметра, в твоем случае, передовалось значения поля t1_rowid.
    то же самое можно сделать и для detail1-detail2

    как сделать внешнюю функцию хорошо расписано в документации.
  • отредактировано October 2005
    Простой пример можете взять Здесь (переделанный).
  • отредактировано 10:49
    Lex
    Спасибо большое за ответ, я пока только начинаю разбираться с отчетами, сложновато с моим отчетом (с простыми отчетами работа идет без каких либо проблем) но делать все равно надо, буду разбираться с ф-ми.
    -=Den=-
    Скачал, то что надо! Правда были проблемы с переходом на 3.14, с 3.18, не большие, перенастроил поля, и все стало на место. Понятно значит, как это делается.. Все супер! Теперь все ясно. По покупке уже ясно, берем, думаю в конце этой - начеле следующей от нашей организации будет платеж.
  • отредактировано 10:49
    -=Den=-
    У меня вопрос, не существенный конечно (можно даже сказать это совсем мелочь, просто интересно), главное все работает как надо! Ещё раз благодарю ;)
    Когда делаю в Дизайнере - Отчет - Данные и отмечаю галочками 3 frxDBDataset, то отчет показывается в превью, в дизайнере. Сохраняю, выхожу. Из программы уже не печатается, пишет ошибку, EstackOverflow. Снимаю галочки в дизайнере, сохраняю, уже не работает превью в дизайнере, за то работает из программы (что и надо). Т.е. в отчте не надо хранить данные об frxDBDataset? Т.е. их помечать галочками?
  • отредактировано 10:49
    В примере я подключил DataSet динамически
      frxReport1.LoadFromFile('report.fr3',true);{загрузка отчёта из текушего каталога}
    
      frxReport1.DataSets.Add(frxDBDataset1);{подключаю 1-й датасет}
      frxReport1.DataSets.Add(frxDBDataset2);{подключаю 2-й датасет}
      frxReport1.DataSets.Add(frxDBDataset3);{подключаю 3-й датасет}
    {если их закоментировать то можно ставить галочки в дизайнере}
      
      MBand1:=frxReport1.FindObject('MasterData1') as TfrxMasterData;
      MBand2:=frxReport1.FindObject('MasterData2') as TfrxMasterData;
      DBand:=frxReport1.FindObject('DetailData1') as TfrxDetailData;
    {поиск бэндов на отчёте}
      MBand1.DataSet:= frxDBDataset1;
      MBand2.DataSet:= frxDBDataset3;
      DBand.DataSet:= frxDBDataset2;
    {подключение бэндов к датасетам}
    
    если закоментировать весь этот код , подключать датасеты придётся в дизайнере:
    1)report->data->выбрать датасеты.
    2)установить датасеты на бэнды (двойным кликом на бэнде).

    Читайте документачию там всё это описано.

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

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