как в FastReport в 8 ячеек занести результ 8запрос

отредактировано 04:30 Раздел: FastReport 2.xx VCL
В общем необходимо занести в отчёт числа, являющиеся результатами 8 запросов, как это сделать?

Комментарии

  • BorisBoris Москва
    отредактировано 04:30
    Напиши поподробнее, что за запросы и сколько записей они возвращают. Или запросы возвращают какие-либо агрегирующие характеристики? И пробовал ли ты сделать объединение запросов?
  • отредактировано 04:30
    Boris написал:
    Напиши поподробнее, что за запросы и сколько записей они возвращают. Или запросы возвращают какие-либо агрегирующие характеристики? И пробовал ли ты сделать объединение запросов?
    select COUNT(*) from pWorker pw, pWorkerAdd pwAdd where (pw.id=pwAdd.WorkerId and pwAdd.SeniorityBr<=DATEADD(yyyy,-1, ;) 2)) and pwAdd.SeniorityBr>DATEADD(yyyy,-3, ;) 3)
    такой вот запрос
    Объединение пробовал, и у меня выводило инфу о числе людей с каждой категории, но потом я понял, что с первымстолбцом будет гемор, поэтому я решил просто поставить 16 TfrMemoView и в один столбец забить текст первого столбца, а во второй выводить результаты запросов.
    До 1 года -        30                                                                           
    От 1 до 3 лет -    25                                                                           
    От 3 до 5 лет -    31                                                                           
    От 5 до 10 лет -   84                                                                           
    От 10 до 15 лет -  49                                                                           
    От 15 до 20 лет -  47                                                                           
    От 20 до 25 лет -  46                                                                           
    Свыше 25 лет -
  • BorisBoris Москва
    отредактировано February 2004
    Не совсем понял, почему с первым столбцом "гемор"? ;) ) По-моему ты нормально решил проблему.
    Хотя можно написать такой скриптик в том frMemoView, в котором планируешь выводить текст типа "от "лет" до "лет"":
    if [LINE#]= 1 then 
      Range:= 'До 1 года';
    if [LINE#]= 2 then 
      Range:= 'От 1 до 3 лет';
    if [LINE#]= 3 then 
      Range:= 'От 3 до 5 лет';
    if [LINE#]= 4 then 
      Range:= 'От 5 до 10 лет';
    if [LINE#]= 5 then 
      Range:= 'От 10 до 15 лет';
    if [LINE#]= 6 then 
      Range:= 'От 15 до 20 лет';
    if [LINE#]= 7 then 
      Range:= 'От 20 до 25 лет';
    if [LINE#]= 8 then 
      Range:= 'Свыше 25 лет';
    

    Ну, или покрасивее:
    case [LINE#] of
      1: Range:= 'До 1 года';
      2: Range:= 'От 1 до 3 лет';
      3: Range:= 'От 3 до 5 лет';
      4: Range:= 'От 5 до 10 лет;
      5: Range:= 'От 10 до 15 лет';
      6: Range:= 'От 15 до 20 лет';
      7: Range:= 'От 20 до 25 лет';
      8: Range:= 'Свыше 25 лет';
    end; 
    

    Тогда не надо будет лепить 16 frMemoView.
  • отредактировано 04:30
    теперь первый столбец я забил намертво. и мне хочется знать как в ячейки второго столбца вставить результаты запросов.
  • BorisBoris Москва
    отредактировано 04:30
    Построй свой запрос следующим образом:
    select COUNT(*) as result from pWorker pw, pWorkerAdd pwAdd where (pw.id=pwAdd.WorkerId and pwAdd.SeniorityBr<=DATEADD(yyyy,-1,2)) and pwAdd.SeniorityBr>DATEADD(yyyy,-3,3)

    Потом создай TDataSet или TQuery, как уж больше нравится и выполняй свои запросы через него один за другим.
    А результаты передавай в отчет например таким образом:
    frVariables['Result1']:= Query1.FieldByName('result').AsInteger;
    
    где Result1, Result2, ... - переменные в отчете.
    Выполнил запрос, сохранил значение, выполнил следующий и т.д. Потом делаешь:
    if frReport1.PrepareReport then
      frReport1.ShowPreparedReport;
    

    И все:)
  • отредактировано 04:30
    Не согласен с такой схемой отчета абсолютно. Аналогичную задачу я решил так: ОДИН запрос, который возвращает возраст. Дальше в МастерДате нулевой высоты считаються люди по возрастам, и в РепортСуммари выводятся В СТРОКУ (зачем колонки?).
    Зачем все эти сложности? По моему чем меньше объектов используется тем лучше. При такой схеме отчета 1 запрос, 3 секции и 7 строк кода.
  • отредактировано 04:30
    P.S. В принципе от секций можно отказаться запустив цикл по рекордсету запроса ;)
  • отредактировано 04:30
    Boris написал:
    Ну, или покрасивее:
    case [LINE#] of
      1: Range:= 'До 1 года';
      2: Range:= 'От 1 до 3 лет';
      3: Range:= 'От 3 до 5 лет';
      4: Range:= 'От 5 до 10 лет;
      5: Range:= 'От 10 до 15 лет';
      6: Range:= 'От 15 до 20 лет';
      7: Range:= 'От 20 до 25 лет';
      8: Range:= 'Свыше 25 лет';
    end; 
    
    а куда это вкидывать? я пробовал в редакторе свойств ячейки вставлять между begin и end, но оно не работает
  • BorisBoris Москва
    отредактировано 04:30
    В редакторе (двойной щелчок по объекту или правой кнопкой мыши вызвать меню и выбрать пункт Редактор) ставим галку там где "Скрипт", в появившемся окошечке вписываем текст скрипта (внутри блока begin end). При этом в самом мемо должно быть вписано [Range], так как это параметр, значение которого меняется в скрипте.

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

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