Передача в DataSet

отредактировано 16:46 Раздел: FastReport 3.0
У меня такой вопрос.
DataModule на котором расположен frxReport и frxDBDataset1

Имеется форма которая создается многократно. На ней расположен IBQuery
Пишу следующий код при распечатке.

DM.frxReport.Clear;
DM.frxReport.LoadFromFile(DM.REPORTPATH+'.\Список абонентов.fr3');
DM.frxDBDataset1.Dataset:=IBQuery1;
DM.frxDBDataset1.UserName:='frxDBAbonents';
DM.frxReport.ShowReport;

Но при переключении между этими окнами на печать всё равно отправляется только данные из формы которая была создана первой.

Комментарии

  • отредактировано 16:46
    написал:
    У меня такой вопрос.
    DataModule на котором расположен frxReport и frxDBDataset1

    Имеется форма которая создается многократно. На ней расположен IBQuery
    Пишу следующий код при распечатке.

    DM.frxReport.Clear;
    DM.frxReport.LoadFromFile(DM.REPORTPATH+'.\Список абонентов.fr3');
    DM.frxDBDataset1.Dataset:=IBQuery1;
    DM.frxDBDataset1.UserName:='frxDBAbonents';
    DM.frxReport.ShowReport;

    Но при переключении между этими окнами на печать всё равно отправляется только данные из формы которая была создана первой.
    Все дело в команде

    DM.frxDBDataset1.Dataset:=IBQuery1;

    Если хотите, иметь отчет из других данных переприсвойте Dataset, при этом указывайте форму
    Например
    DM.frxDBDataset1.Dataset:=TForm1(Screen.ActiveForm).IBQuery1;
  • отредактировано March 2007
    Форма которая многкратно создается - TAbonentsForm.
    Пишу перед печатью

    procedure TAbonentsForm.ToolButton6Click(Sender: TObject);
    begin
    DM.frxReport.Clear;
    DM.frxReport.LoadFromFile(DM.REPORTPATH+'.\Список абонентов.fr3');
    DM.frxDBDataset1.Dataset:=TAbonentsForm(Screen.ActiveForm).IBQuery1;
    DM.frxDBDataset1.UserName:='frxDBAbonents';
    DM.frxReport.ShowReport;
    end;

    Всё равно тот же эффект - появляются данные только из первой созданной формы.
  • отредактировано 16:46
    написал:
    Форма которая многкратно создается -  TAbonentsForm.
    Пишу перед печатью

    procedure TAbonentsForm.ToolButton6Click(Sender: TObject);
    begin
    DM.frxReport.Clear;
    DM.frxReport.LoadFromFile(DM.REPORTPATH+'.\Список абонентов.fr3');
    DM.frxDBDataset1.Dataset:=TAbonentsForm(Screen.ActiveForm).IBQuery1;
    DM.frxDBDataset1.UserName:='frxDBAbonents';
    DM.frxReport.ShowReport;
    end;

    Всё равно тот же эффект - появляются данные только из первой созданной формы.
    Попробуй frxReport и frxDBDataset1 переложить с датамодуля на форму (не очень красиво, но тоже вариант)
  • отредактировано 16:46
    iva написал:
    Попробуй frxReport и frxDBDataset1 переложить с датамодуля на форму (не очень красиво, но тоже вариант)
    Не хотелось прибегать к этому ;)
  • отредактировано 16:46
    написал:
    написал:
    Попробуй frxReport и frxDBDataset1 переложить с датамодуля на форму (не очень красиво, но тоже вариант)
    Не хотелось прибегать к этому ;)
    Еще вариант: динамически создавать датамодуль, на котором лежит отчет. Отчет будет совершенно новый по новым данным.
  • Stalker4Stalker4 123
    отредактировано 16:46
    Кстати говоря, последний вариант с динамическим созданием датамодуля, ИМНО самый правильный, удобный и стабильный.

    Есть DocDataModule на котором находиться frxReport и сопутствующие ему компоненты.

    Из основного модуля программы запускаю формирование отчета, примерно так;

    procedure TMyForm.PrintActionExecute(Sender: TObject);
    var
    DocDataModule :TDocDataModule;

    begin

    DocDataModule := TDocDataModule.Create(Self);
    try
    DocDataModule.PrintMyReport(<параметры если надо>);
    finally
    DocDataModule.Free;
    end;

    end

    Соответственно в самом DocDataModule находится процедура которая загружает нужный отчет из файла или из базы, устанавливает если надо необходимые переменные отчета и запускает превью отчета на выполнение.


    Я такой вариант использую еще со времени FR 2.0 и все работает без проблем.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.