Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2011, 14:38   #1
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию Fast Report проблема


Как мне сделать в Fast Report, чтобы в 4 ячейке выводилось среднее арифметическое 1,2,3 ячеек? Пытался функцией AVG() сделать, ничего не получилось.

1,2,3 ячейки - это поля БД. БД вызываю через ADOQuery.

В FreeReport вот так проканывало: [Round([qry1."Рубежный_контроль"+qry1."Сред ний_бал"+qry1."Оценка_тест"]/3)]
А в FastReport уже не канает.

Последний раз редактировалось Devostator; 10.03.2011 в 14:42.
Devostator вне форума Ответить с цитированием
Старый 10.03.2011, 16:26   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, там же все написано...
Подключаем набор данных в отчете.
Бросаем frxMemo в Бэнд. Кликаем по frxMemo два раза.
Жмем "Вставить Агрегатную функцию"

Устанавливаем:
Функция - AVG
Дата бэнд - наш
Набор данных - наш
Поле БД - не указываем

Жмем кнопку "Выражение"
В нем кликаем по нужным полям и сплюсовываем их.
Допустим у нас поля f1,f2,f3
Значит строка будет выглядеть так
Код:
[AVG(<frxDB."f1"> + <frxDB."f2"> + <frxDB."f3">)]
Кстати, агрегатные функции работают только в футерах (то бишь подвалах) !!!!

Последний раз редактировалось _SERGEYX_; 10.03.2011 в 16:28.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.03.2011, 16:49   #3
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
В нем кликаем по нужным полям и сплюсовываем их.
Допустим у нас поля f1,f2,f3
Нет там полей. У меня через ADOQuery все работает.
Ну я вписал поля, которые должны быть приплюсованы, вот так:
Код:
[AVG(<frxDBDataset1."Рубежный_контроль">+<frxDBDataset1."Средний_бал">+<frxDBDataset1."Оценка_тест">,MasterData1)]
В итоге все ячейки пустые. Даже в 1,2,3 ячейках перестал выводить данные. Никакой ошибки не вывел.

Поменял формат ячеек с "числовой" на "текст", теперь показывает 1,2,3 ячейки. А вот их сумму так и не показывает.

Последний раз редактировалось Devostator; 10.03.2011 в 17:01.
Devostator вне форума Ответить с цитированием
Старый 10.03.2011, 17:10   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

То есть как в ADOQuery нет полей если в нем выполнен запрос???
Должен быть frxDBDataset1.DataSet := ADOQuery;
А в ADOQuery должны быть поля.
Или их можно создавать динамически а запросе, напрмер
select [Рубежный_контроль] as Control и т.д....
В самом отчете Меню > Отчет > Данные должен быть подключен frxDBDataset1.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.03.2011, 17:14   #5
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию

Запрос создается в ходе выполнения программы. Потом, то что получилось выводится в отчет.
А так все подключено. Все данные выводятся: Фамилия, оценки. А вот среднее арифметическое этих трех ячеек не могу вывести.

Самое странное, что в FreeReport все получилось, а вот в FastReport'e не получается...

Последний раз редактировалось Devostator; 10.03.2011 в 17:17.
Devostator вне форума Ответить с цитированием
Старый 10.03.2011, 17:29   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, если не получается, попробуй так
Код:
[round((<frxDBDataset1."f1">+<frxDBDataset1."f2">+<frxDBDataset1."f3">) / 3)]
т.е. просто раздели сумму на 3. Но это не очень красиво выглядит.
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.03.2011, 17:36   #7
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию

Сработало! Спасибо! На весы щелкнул)
Есть еще один вопрос:
А как теперь подсчитать внизу (в footer) сколько человек получило 3, сколько 4, и сколько 5? Данные находятся в четвертой ячейке.
Devostator вне форума Ответить с цитированием
Старый 10.03.2011, 18:07   #8
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию


Народ, подскажите пожалуйста! Как подсчитать из этого столбца в FastReport'e сколько четверок, пятерок, троек?
Devostator вне форума Ответить с цитированием
Старый 10.03.2011, 18:25   #9
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Хе, первое, что пришло в голову
Код:
var s: string;

  s := '';
  Query.close;
  Query.SQL.Clear;
  Query.SQL.Add('select distinct f4 from MyTable');
  Query.Open;

  while not Query.Eof do
  begin
    Query2.close;
    Query2.SQL.Clear;
    Query2.SQL.Add('select count(*) from MyTable where f4 = ' + Query.Fields[0].asstring);
    Query2.Open;
    s := s + Query.Fields[0].asstring + '  -  ' + Query2.Fields[0].asstring + #13 + #10;
    Query.Next;
  end;
  ShowMessage(s);
Принцип понятен?
Потом передать переменную s в отчет.
Предвижу, что следующим вопросом будет как передать переменную в отчет .
Вот так:
Пишем где-то в отчете в квадратных скобках [s]
А в коде перед показом отчета
Код:
frxReport1.Script.Variables['s'] := s;
_SERGEYX_ вне форума Ответить с цитированием
Старый 10.03.2011, 18:34   #10
Devostator
Пользователь
 
Регистрация: 05.02.2010
Сообщений: 45
По умолчанию

Так 4 ячейки в БД нету. Она получается в ходе вычисления среднего арифметического 1,2,3 ячеек.
Devostator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Fast Report Равиль2303 Компоненты Delphi 2 31.01.2011 16:21
проблема с Fast Report. File not found "frxClass.dcu" ?! ?! R11 Помощь студентам 1 09.06.2010 15:54
Fast Report andreyjn Компоненты Delphi 1 06.09.2009 20:16
Fast Report SERG1980 Компоненты Delphi 0 15.12.2008 09:08
fast report Toxa Общие вопросы Delphi 0 04.12.2006 10:49