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


Автор: rlocal 2.2.2009, 19:35
Приветствую всех участников форума!

Пишу в связке Delphi + FastReport 3.xx
У меня такая проблема: Данные из Excel файла загружаются в TSringGrid. Нужно сформировать отчет в FR3.xx таким образом, чтобы получилось письмо вида:

--------------------------------
Уважаемый(ая) ххх ууу!

{Далее идет текст}
--------------------------------

Естественно, вместо ххх и ууу нужно подставить данные из соответствующих столбцов StringGrid-а. Как это сделать? И возможно ли что-то такое подобное?

Заранее благодарю всех откликнувшихся.

Автор: Данкинг 2.2.2009, 19:37
Намекаю: через временную таблицу, к примеру,  MDB. В неё загоняешь свои данные и дальше выводишь их из неё. Как - смотри мануалы к  FR. smile 

Автор: rlocal 2.2.2009, 20:00
Данкинг, если можно, то приведите пример кода, как можно создать эту временную таблицу? Я с FR вообще раньше не работал, да и с данными тоже... :( Подскажите пожалуйста...

И еще вопрос: Как мне сделать в FR  так, чтобы автоматом создавалась другая страница "по шаблону" и туда подставлялись значения из StringGrida? А то с одной страницей то все нормально, но мне нужно сразу 500 странить сформировать и выдать на печать :(

Автор: Данкинг 2.2.2009, 20:01
Цитата(rlocal @  2.2.2009,  20:00 Найти цитируемый пост)
как можно создать эту временную таблицу? 

А это к FR непосредственного отношения не имеет. smile Поищи по форуму о работе с Access. smile 

Автор: rlocal 2.2.2009, 20:20
Я сразу извинюсь.... я тут новичек... попробовал поискать про эти временные таблицы - запутался только...  smile 
Если можно - покажите живой пример, время поджимает, как всегда, а завтра сдавать уже нужно  smile 

Заранее благодарю...

Автор: Akella 2.2.2009, 20:35
Тебе нужна не временная таблица, а "таблица в памяти". Т.е. MemoryTable. Это такая компонента. В стандартных компонентах ты её не найдёшь. Но есть TClientDataSet. Её можно использовать. Кинь на форму, добавь туда соответствующие поля. Хотя с этой компонентой я намучался в своё время. Лучше поискать стороннюю компоненту. TMemTableEh есть в составе библиотеки EhLib, версия 3.6 библиотеки EhLib бесплатная для жителей стран бывшего СНГ. Есть MemoryTable в пакете Jeddi, тоже бесплатно. Есть TdxMemTable в составе компонент DevExpress, но эти компоненты весьма дорогие для нас.


И так... в цикле по твоему стринг гриду заполняешь заранее настроенный TMemTable. А TMemTable у тебя уже должен быть подключен к TfrxDataset. А TfrxDataset уже виден в фастрепорте. smile  smile 

Автор: Данкинг 2.2.2009, 23:26
Цитата(rlocal @  2.2.2009,  20:20 Найти цитируемый пост)
а завтра сдавать уже нужно 

Хочешь за один вечер освоить FR и работу с BD? Ну давай, дерзай. smile А если нужно что-то написать за тебя - так это в "центр помощи".
 Да, а ещё такую персонализацию можно из "Ворда" сделать, как-то там подцепить таблицу БД через "слияние". Я лично не пробовал, но наши ребята так делают.
 Да, а ещё есть "Crystal Reports" !

Автор: Akella 3.2.2009, 00:33
Не... ну а чё... ночь ещё впереди, как всегда...

Автор: Данкинг 3.2.2009, 00:49
Цитата(Akella @  3.2.2009,  00:33 Найти цитируемый пост)
Не... ну а чё... ночь ещё впереди, как всегда... 

В общем-то, освоить основы неизвестной СУБД за ночь, конечно, реально... Но не в этом случае, думаю. smile 

Автор: Akella 3.2.2009, 09:10
Ага, если б ему нужно было..... уже б давно освоил.

Автор: Frees 3.2.2009, 09:22
Цитата(rlocal @  2.2.2009,  21:35 Найти цитируемый пост)
У меня такая проблема: Данные из Excel файла загружаются в TSringGrid. Нужно сформировать отчет в FR3.xx таким образом, чтобы получилось письмо вида


Можно из TSringGrid нужные данные загонять в Variables фаст репорта созданные зарание

Код

Variables['ххх'] := SringGrid[1,2];


в отчете должна быть переменная ххх

Автор: Данкинг 3.2.2009, 11:07
Frees, ну да, действительно, так даже проще. Я сразу пошёл вумным путём просто. smile 

Автор: Akella 3.2.2009, 11:09
И сколько это переменных должно быть? А можно поподробнее с примером? До мну не доходит. smile 

Автор: Frees 3.2.2009, 11:16
Цитата(Akella @  3.2.2009,  13:09 Найти цитируемый пост)
И сколько это переменных должно быть?

а вот это зависит от того что за задача

Добавлено через 5 минут и 17 секунд
rlocal, также решение твоей задачи можно найти в примере PrintArray fast reporta

Автор: Akella 3.2.2009, 11:26
Ты не понял, переменных нужно по количеству колонок или по количеству ячеек?

Добавлено через 46 секунд
Цитата(Frees @  3.2.2009,  11:16 Найти цитируемый пост)
решение твоей задачи можно найти в примере PrintArray fast reporta 

угу, будет интересно, спасибо

Автор: rlocal 3.2.2009, 11:43
Мда... действительно за одну ночь не успел :(. Но отсрочил еще на два дня (вместе с этим днем).
Никак не пойму следующее:
Вот я в дезайнере создал шаблон письма, поместил туда два текстовых поля, в одном основной текст, в другом текст такого вида: 
"Уважаемый(ая) [name] [fullname] !". И самое смешное, что это работает с одним листом и кодом
Код

  frxReport1.Variables['name'] := QuotedStr(StringGrid1.Cells[2,3]);
  frxReport1.Variables['fullname'] := QuotedStr(StringGrid1.Cells[3,3]);


Потом я решил, что если поместить еще на лист MasterDat-у, растянул его на весь лист и поместил туда тот же текст, то по моей логике листы должны размножиться и получиться отчет в том виде, как мне нужно. НО! Как только я так сделал у меня вообще теперь просто пустой лист без какого либо текста... :( Что я делаю не так? Как нужно правильно?

Автор: Akella 3.2.2009, 12:15
Может ты с бэндами напутал? Или вообще без них работаешь.

Автор: rlocal 3.2.2009, 13:01
А как это можно проверить, правильно я делаю или нет? Сейчас смотрю пример с PrintArray, но что-то не до конца понятно как это применить именно к моему примеру?.... :(

Автор: Данкинг 3.2.2009, 13:24
Цитата(rlocal @  3.2.2009,  13:01 Найти цитируемый пост)
А как это можно проверить, правильно я делаю или нет? 

Посмотреть примеры из мануала к FR. В твоём случае, с только переменными, можно даже ограничиться одним бэндом "HEADER", растянув его на всю страницу.

Автор: rlocal 3.2.2009, 14:31
 smile  УРААааааааа!!!!  smile Все работает!!!  Данкинг спасибо за подсказку про хидер, так бы и мучался до сих пор с мастердатой... Теперь осталось только все "причесать"! Попутно вопрос: При повторном открытии но уже другого *.xls файла программа долго думает и в результате в отчете из 6000 страниц заполненными остаются только 371, а остальные пустые (без подставленных имен и отчеств). В чем может быть причина? Хэлп ми плиз!

Автор: Данкинг 3.2.2009, 15:24
Цитата(rlocal @  3.2.2009,  14:31 Найти цитируемый пост)
В чем может быть причина?

Разбирайся с XLS, так трудно сказать.

Автор: Akella 3.2.2009, 17:06
Цитата(rlocal @  3.2.2009,  14:31 Найти цитируемый пост)
Попутно вопрос: 

нельзя
Модератор: один вопрос = одна тема

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