Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Вывод в отчет текущей записи


Автор: VanHelsing 11.3.2010, 18:35
Использую систему отчета FastReport. В отчет необходимо выводить в отчет только текущую запись. Не знаю как это сделать. Подскажите пожалуйста!

Автор: Данкинг 11.3.2010, 18:43
Сделай запрос на эту запись, и из запроса уже выводи. smile 

Автор: VanHelsing 11.3.2010, 18:44
Интересно, а проще никак нельзя?

Автор: Данкинг 11.3.2010, 19:07
Вообще, действительно, можно и проще. Просто кинь на отчёт текстовые поля, их значения бери из фастовых переменных. А значения этих переменных, соответственно, вставляй из полей датасета по 
Код

procedure TForm1.frxReport1GetValue(const VarName: String;
  var Value: Variant);

 smile 

Автор: VanHelsing 11.3.2010, 19:17
Цитата

Вообще, действительно, можно и проще. Просто кинь на отчёт текстовые поля, их значения бери из фастовых переменных. А значения этих переменных, соответственно, вставляй из полей датасета  

Пожалуйста приведи пример как это сделать, не могу разобраться.

Автор: Данкинг 11.3.2010, 19:22
VanHelsing, вот http://forum.vingrad.ru/index.php?showtopic=244473&view=findpost&p=1762140 ссылки снизу, там я даже мануал в картинках ваял. smile 

Впрочем, картинки уже не грузятся, но, надеюсь, по описанию поймёшь.

Автор: Deniz 12.3.2010, 07:46
VanHelsing, есть еще несколько вариантов.
1. Клонировать запись в ClientDataSet
2. Временно поставить фильтр на DataSet, чтобы была только эта запись. Фаст только ее и покажет.
3. Передавать переменные в отчет по 
Код
frxReport1.Variables['VarName']:=NeedValue;

Автор: pseud 12.3.2010, 10:11
Цитата(Данкинг @  11.3.2010,  19:07 Найти цитируемый пост)
 Просто кинь на отчёт текстовые поля, их значения бери из фастовых переменных. А значения этих переменных, соответственно, вставляй из полей датасета по 

сложновато.
да, просто кинь на отчет текстовые поля, а перед выводом отчета присвой им нужные тексты.

Автор: Данкинг 12.3.2010, 10:39
Цитата(pseud @  12.3.2010,  10:11 Найти цитируемый пост)
сложновато.
да, просто кинь на отчет текстовые поля, а перед выводом отчета присвой им нужные тексты. 

Ну так а я как сказал? smile 

Автор: pseud 12.3.2010, 11:04
Цитата(Данкинг @  12.3.2010,  10:39 Найти цитируемый пост)
Ну так а я как сказал?

а ты сказал пользоваться переменными. 
нет, я ими, конечно, пользуюсь, но это немного более сложные отчеты ))
а вот, что я имею ввиду:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  with frxReport1 do
  begin
    TfrxMemoView(FindObject('Memo1')).Text := 'VanHelsing';
    TfrxMemoView(FindObject('Memo2')).Text := 'не используй';
    TfrxMemoView(FindObject('Memo3')).Text := 'переменные';
    ShowReport;
  end;
end;

Автор: Данкинг 12.3.2010, 12:30
Цитата(pseud @  12.3.2010,  11:04 Найти цитируемый пост)
а вот, что я имею ввиду:

Ну, может быть, так и проще, просто я привык с переменными. Как меня научили - так и делаю с тех пор. smile 

Автор: Akella 12.3.2010, 17:39
Цитата(VanHelsing @  11.3.2010,  18:35 Найти цитируемый пост)
В отчет необходимо выводить в отчет только текущую запись. 

А можно по русски рассказать, что такое текущая запись? А мои телепатические возможности в пятницу не хотят работать.

Автор: Alexeis 12.3.2010, 17:48
Цитата(Akella @  12.3.2010,  16:39 Найти цитируемый пост)
А можно по русски рассказать, что такое текущая запись? А мои телепатические возможности в пятницу не хотят работать. 

Скорее всего последнюю добавленную.

Автор: VanHelsing 12.3.2010, 18:08
Цитата

А можно по русски рассказать, что такое текущая запись? А мои телепатические возможности в пятницу не хотят работать. 

Это та запись на которой находится курсор(объясняю я плохо, т.к. с БД только знакомлюсь заранее извиняюсь).

Автор: Данкинг 12.3.2010, 18:09
Цитата(Akella @  12.3.2010,  17:39 Найти цитируемый пост)
А можно по русски рассказать, что такое текущая запись? 

Видимо, на которой стоишь в датасете - ту и выводить. Я так понял. smile

Добавлено через 20 секунд
Цитата(VanHelsing @  12.3.2010,  18:08 Найти цитируемый пост)
Это та запись на которой находится курсор

Я угадал! smile 

Автор: pseud 12.3.2010, 18:20
Цитата(VanHelsing @  12.3.2010,  18:08 Найти цитируемый пост)
Это та запись на которой находится курсор(объясняю я плохо, т.к. с БД только знакомлюсь заранее извиняюсь).

а по существу? мои содрагания возымели пользу?

Автор: VanHelsing 12.3.2010, 19:48
Цитата

а по существу? мои содрагания возымели пользу?

Да, спасибо большое - получилось. 
Как я понял по для вывода текущей записи существует два способа:
1. Это создание дополнительных переменных(или например объектов типа dbtext) и передавать предлагаемыми способами в отчет.
2. Использовать компонент Query и из получившейся таблицы генерировать отчет.

Автор: Данкинг 12.3.2010, 20:00
VanHelsing, по-моему, ты не совсем верно понял; посмотри ещё раз код, который pseud написал.

Автор: Akella 13.3.2010, 15:27
Я бы использовал ещё один набор данных, в который передавал условие:
where id = ....

Автор: VanHelsing 13.3.2010, 15:33
Цитата

Я бы использовал ещё один набор данных, в который передавал условие:
where id = ....

Как я понимаю одну и ту же БД используют несколько компонентов доступа. Например, TTable и TQuery?

Автор: Данкинг 13.3.2010, 18:05
Цитата(Akella @  13.3.2010,  15:27 Найти цитируемый пост)
Я бы использовал ещё один набор данных, в который передавал условие:
where id = ....

Я примерно то же и написал в первом своём посте. smile 

Цитата(VanHelsing @  13.3.2010,  15:33 Найти цитируемый пост)
Как я понимаю одну и ту же БД используют несколько компонентов доступа. Например, TTable и TQuery? 

Да, а к чему такой вопрос?

Автор: Deniz 15.3.2010, 06:42
Цитата(Akella @  13.3.2010,  17:27 Найти цитируемый пост)
Я бы использовал ещё один набор данных, в который передавал условие:
where id = .... 
не есть гуд, запрос может быть слишком сложный, и на его выполнение может потребоваться доп. время, так же может повлиять уровень изоляции транзакции, т.е. если это не SnapShot то кто-то мог уже изменить эту запись, и при повторном запросе данные в отчете и на экране будут разными.
Чем не нравятся мои варианты:
1. Клонировать запись в ClientDataSet
2. Временно поставить фильтр на DataSet, чтобы была только эта запись. Фаст только ее и покажет.
Второй вариант, на мой взгляд, более подходящий, потому как не требует дополнительного кодинга.
Код
i:=DataSet.FieldByName('id').asInteger;
DataSet.Filter:='id = ' + inttostr(i);
DataSet.Filtered:=True;
frxReport1.ShowReport;
DataSet.Filtered:=False;
DataSet.Locate('id', i, []);

Автор: former 17.3.2010, 15:37
Как много вариантов, а правильного нет. smile 
Устанавливаем следующие значения в frxDBDataset:
user posted image
и все. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)