Перейти к содержанию
Fire Monkey от А до Я
  • 0

FastReport +DLL - проблема


Antonyan

Вопрос

Добрый день, коллеги !

 

Неожиданно столкнулся с проблемой при использовании FastReport5 в XE7.

 

Суть :

Создаю отчет test.fr3, в котором в одно единственное поле из БД выводится информация об адресе. 

Создаю VCL проект, кидаю на форму :

 

FDConnection1,

Temp: TFDQuery,

FDGUIxWaitCursor1

 

Далее, коннект к базе FB.

Под кнопкой пишу код:

 

procedure TForm3.Button2Click(Sender: TObject);
var
   frxReport1          : TfrxReport;
   frxDBDataset1    : TfrxDBDataset;
begin

  frxReport1:=TfrxReport.Create(nil);
  frxDBDataset1:=TfrxDBDataset.Create(nil);
  frxDBDataset1.UserName:='Rekv';
  frxDBDataset1.DataSet:=Temp;

 

{ // В VCL - работает без этих строк, в DLL - разумеется, нет.
  frxReport1.DataSets.Clear;
  frxReport1.DataSets.Add(frxDBDataset1);
  frxReport1.DataSet:=frxDBDataset1;
  frxReport1.DataSetName:=frxDBDataset1.UserName;
}


      frxReport1.LoadFromFile('e:\test.fr3');
   

      frxReport1.ShowReport(True);

 

end;

 

Этот код работает прекрасно, отчет формируется, информация из БД присутствует в отчете. Вопросов к нему нет.

Проблемы начинаются, когда я пытаюсь использовать формирование и вызов отчета из DLL

 

Вызов : PrintData(MyQuery);

 

function PrintData(Temp: TFDQuery): Integer; stdcall;
var
   frxReport1        : TfrxReport;
   frxDBDataset1  : TfrxDBDataset;

begin

 

  Result := 0;

  frxReport1:=TfrxReport.Create(nil);
  frxDBDataset1:=TfrxDBDataset.Create(nil);


  frxDBDataset1.UserName:='Rekv';
  frxDBDataset1.DataSet:=Temp;


  frxReport1.DataSets.Clear;
  frxReport1.DataSets.Add(frxDBDataset1);
  frxReport1.DataSet:=frxDBDataset1;

  frxReport1.DataSetName:=frxDBDataset1.UserName;

  frxReport1.LoadFromFile('e:\test.fr3');

  frxReport1.ShowReport(True);

 

end;
 

 

В итоге, отчет формируется и запускается, информация из БД присутствует в отчете, но возникает сообщение об ошибке :

 

Были обнаружены следующие ошибки :  Memo1 : Поле не найдено : Rekv."Adress"

 

Как победить эту ошибку ?

Изменено пользователем Antonyan
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

У вас в начале кода так и написано: Создаю VCL проект, кидаю на форму. Простите за ламмерство или вы меня совсем запутали. Каким образом вы вызываете  fastreport из dll? То есть вы не используете специально написанный fastreport FMX? Или я чего-то не догоняю?

Ссылка на комментарий
  • 0

У вас в начале кода так и написано: Создаю VCL проект, кидаю на форму. Простите за ламмерство или вы меня совсем запутали. Каким образом вы вызываете  fastreport из dll? То есть вы не используете специально написанный fastreport FMX? Или я чего-то не догоняю?

 

Добрый вечер!

 

Попробую пояснить. Переписываю свой старый проект под Win7, 8, 10 по просьбе заказчика. После раздумий - решил писать под Win на FMX. FastReport в XE7 представлен только для VCL, под FMX он отсутствует (могу ошибаться, но где то попадалось, что под FMX он существует в виде отдельного платного пакета, хотя в сети есть и ломаные. Ни то, ни другое меня не устраивает). Поэтому, для формирования отчета создал Dll, из которой успешно вызываю FR. В принципе, свой вопрос я решил, но не так как мне бы хотелось. Интересно разобраться, где и что я упустил.

Ссылка на комментарий
  • 0

Немного понятно стало. Я не силен в вызовах из dll. Ошибка ссылается на memo, оно где?

 

Memo - так звучит в сообщении об ошибке. В самом отчете данные из БД выводятся в TFrxMemoView, связанный с набором данных через frxDBDataset1. Вот и любопытно, почему один и тот же код в Application.VCL работает отлично, а в DLL отрабатывает, но выводит указанную ошибку.

Ссылка на комментарий
  • 0

Ну забейте на ошибку))) try except  и тд)))

 

PS возможен глюк FR. На днях пытался выяснить почему в FR RMX не работает межстрочный интервал в memo. И что вы думаете? Ответили, что мол он еще не реализован!!!!!! Я просто охренели от ответа)))) Причем параметр есть (межстрочного интервала), а при смене его вообще ничего не происходит! И вдобавок ответили, что в новой версии (якобы через пару дней) добавят. Я считаю, что это глюк чистой воды, но они не признаются))

Ссылка на комментарий
  • 0

Ну забейте на ошибку))) try except  и тд)))

 

PS возможен глюк FR. На днях пытался выяснить почему в FR RMX не работает межстрочный интервал в memo. И что вы думаете? Ответили, что мол он еще не реализован!!!!!! Я просто охренели от ответа)))) Причем параметр есть (межстрочного интервала), а при смене его вообще ничего не происходит! И вдобавок ответили, что в новой версии (якобы через пару дней) добавят. Я считаю, что это глюк чистой воды, но они не признаются))

 

Вопрос то этот решился через костыль. У них есть штатный режим "тишины", когда ошибки копятся, но на экран не выводятся. Я все же думаю, где то есть мое упущение, да и любопытство разбирает ))

Ссылка на комментарий
  • 0

1. Поробуйте поменять местами строки в Длл

frxDBDataset1.UserName:='Rekv';

frxDBDataset1.DataSet:=Temp;

2. Как вариант вызвать Designer в Длл и просмотреть в нем какие там получились Датасеты и поля (но это смотря какая версия фастрепорта)

Ссылка на комментарий
  • 0

1. Поробуйте поменять местами строки в Длл

frxDBDataset1.UserName:='Rekv';

frxDBDataset1.DataSet:=Temp;

2. Как вариант вызвать Designer в Длл и просмотреть в нем какие там получились Датасеты и поля (но это смотря какая версия фастрепорта)

 

По п.1 - попробую, но маловероятно что поможет, а вот п.2 - интересный вариант, спасибо

Ссылка на комментарий
  • 0

Привет. У меня аналогичная ситуация. Проект давно написал на FMX для Win7. А сейчас заказчик захотел выводить печать на принтер данных с обычного TGrid, штатного решения нету. Решил сразу вывести отчет. Но не могу найти Fast Report FMX...

Когда то делал так: в приложении FMX подключал компоненты для VLC, через их объявление в USES (к примеру VCL.frxClass).

Но FastReport чего то не могу так подключить.

Можешь скинуть свое решение через dll ?   

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...