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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2008, 08:41   #1
HIC
Пользователь
 
Регистрация: 20.06.2007
Сообщений: 39
По умолчанию Передача данных из сохраненного отчета FastReport в Delphi

Передаю отчету данные через переменные, сохраняю. Теперь хочу, чтобы при открытии *.fp3 данные из Memo-полей передавались обратно TEdit-ам, на форме Delphi
Обращаюсь к сохраненному отчету (надеюсь правильно):
Код:
if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then 
  begin 
   frxReport1.Clear; 
   frxReport1.PreviewPages.LoadFromFile(OpenDialog1.FileName, True); 
   frxReport1.ReportOptions.Name := OpenDialog1.FileName;  
   frxReport1.PrepareReport; 
   
   Edit1.Text := ...; 

  end;
А вот что писать вместо многоточия, чтобы передать Edit1 значение Memo, не знаю. Подскажите.
HIC вне форума Ответить с цитированием
Старый 27.10.2008, 09:03   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Примерно так
Код:
uses ...frxClass;

var
  Memo:TfrxMemoView;

frxReport1.FindObject('Memo1') as TfrxMemoView;
Edit1.Text := Memo.Text;
Баламут вне форума Ответить с цитированием
Старый 27.10.2008, 09:16   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, 1) надо бы присвоить Memo
Memo := frxReport1.FindObject('Memo4') as TfrxMemoView;
2) я бы обошёлся без дополнительно объекта,
как то так:
Edit1.Text := (frxReport1.FindObject('Memo4') as TfrxMemoView).Text;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.10.2008, 09:22   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Угу... Поспешил немного
Но вот со вторым утверждением все же не соглашусь. Правильнее будет все-таки так:

Memo := frxReport1.FindObject('Memo4') as TfrxMemoView;
if Assigned(Memo) then Edit1.Text := Memo.Text;

Проверка лишней не будет.

Последний раз редактировалось Баламут; 27.10.2008 в 09:46.
Баламут вне форума Ответить с цитированием
Старый 28.10.2008, 10:56   #5
HIC
Пользователь
 
Регистрация: 20.06.2007
Сообщений: 39
По умолчанию

Блин... Ругается:
Цитата:
Access violation at address 00574728 in module 'TTN.exe'. Read of address 000001EC.
HIC вне форума Ответить с цитированием
Старый 29.10.2008, 01:16   #6
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А в строке
Memo := frxReport1.FindObject('Memo4') as TfrxMemoView;
заменил на название своего Memo?
Баламут вне форума Ответить с цитированием
Старый 29.10.2008, 07:54   #7
HIC
Пользователь
 
Регистрация: 20.06.2007
Сообщений: 39
По умолчанию

))) естественно. Может только в сохраненном отчете имена объектов меняются. Пропарсил *.fp3, нашел <m304 u="Вася"/>, пробовал и m304 и memo304, никак. На то имя которое я дал memo-полю, trucker1, тоже не отзывается. Посоветовали тут на другом форуме:
Цитата:
Посмотри frxReport1.AllObjects.
Только если у тебя в отчете после построения твой объект продублировался, тебе же нужно и Edit дублировать.
Только, как не извращался, так ума и не хватило просмотреть этот frxReport1.AllObjects, и что имеется под дублированием тоже не понял.

И еще, когда ставлю точку после frxReport1, то делфя в выпадающем списке команд не содержит таких, как FindObject или FindComponent. А вот если frxReport1 поставить в начале строки (перед Edit1.Text), то команды присутствуют.

Последний раз редактировалось HIC; 29.10.2008 в 08:07.
HIC вне форума Ответить с цитированием
Старый 29.10.2008, 08:28   #8
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Даже не знаю что и сказать... Проверил, работает. На всякий случай открыл блокнотом сам файл отчета. Там нашел строку <TfrxMemoView Name="Memo1". Т.е. то, что нужно... Выложи отчет сюда. И попробуй такой вот код... Кривоватый, но что-то показывает.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
try
for i := 0 to frxReport1.AllObjects.Count - 1 do
begin
Memo1.Lines.Add(TfrxMemoView(frxReport1.AllObjects[i]).Name);
end;
finally

end;
end;

Последний раз редактировалось Баламут; 29.10.2008 в 09:01.
Баламут вне форума Ответить с цитированием
Старый 29.10.2008, 16:22   #9
HIC
Пользователь
 
Регистрация: 20.06.2007
Сообщений: 39
По умолчанию

Мож у меня где-то еще в коде косяк:
Код:
procedure Form1.OpenExecute(Sender: TObject);
begin
 if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
  begin
   frxReport1.Clear;
   frxReport1.PreviewPages.LoadFromFile(OpenDialog1.FileName, True);
   frxReport1.ReportOptions.Name := OpenDialog1.FileName;
   frxReport1.PrepareReport;
   Edit1.Text := (Report.FindObject('Memo1') as TfrxMemoView).Text;
  end;
end;
Версия фаста, кстати, 4.2.22. Пример отчета в прикрепленном архиве
Вложения
Тип файла: rar 24.rar (19.6 Кб, 32 просмотров)
HIC вне форума Ответить с цитированием
Старый 30.10.2008, 09:54   #10
HIC
Пользователь
 
Регистрация: 20.06.2007
Сообщений: 39
По умолчанию

Нашел решение. Уже где-то близко, но все же не то, немного
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var 
 tmp:TfrxComponent; 
begin
 if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
  begin 
   frxReport1.PreviewPages.LoadFromFile(OpenDialog1.FileName, true); 
   if frxReport1.PrepareReport() then 
    begin 
     tmp:=frxReport1.FindObject('Memo1'); 
     if tmp <> nil then 
      Edit1.Text:=Trim(TfrxMemoView(tmp).Text); 
    end;
  end; 
end;
Правда вставляет зараза имя переменной: [Variable1]
В принципе все правильно, т.к. если пропарсить *.fp3, то видим такую ерундень <TfrxMemoView Name="Memo1" ... Text="[Variable1]"/>.
А вот как получить то, что присваивалось Variable1?

Последний раз редактировалось HIC; 30.10.2008 в 10:03.
HIC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание отчета в delphi Pang БД в Delphi 7 10.01.2012 16:35
Передача данных на сервер с помощью Delphi Арес Работа с сетью в Delphi 7 10.03.2008 13:29
Передача данных из VC++ DLL в Delphi App Kosoglaz Общие вопросы C/C++ 2 05.02.2008 10:53
Формирование отчета в Excel из Delphi Chals Общие вопросы Delphi 1 04.06.2007 19:25