Хочу хранить template отчета в SQL кто сталкивался

отредактировано October 2004 Раздел: FastReport 3.0
Раньше хранил Blob а сейчас кто знает с этим стало лучше? ну чтобы просто без изыска с созданием темп файла.

Андрей

Комментарии

  • отредактировано 04:00

    Что тут сложного объясни??

    unit UReport3;

    interface

    uses
    SysUtils, Classes, DB,
    Graphics, Controls, Forms, Dialogs,

    frxVariables,
    frxExportPDF, frxExportXLS, frxExportHTML,frxDMPClass,
    frxExportTXT, frxClass, frxDesgn, frxDMPExport, frxGradient, frxChBox,

    frxCross, frxRich, frxChart, frxDCtrl, frxFIBComponents, fs_iinterpreter;

    type


    type
    TDmReport3 = class(TDataModule)
    frxFIBComponents: TfrxFIBComponents;
    frxDialogControls: TfrxDialogControls;
    frxChartObject: TfrxChartObject;
    frxRichObject: TfrxRichObject;
    frxCrossObject: TfrxCrossObject;
    frxCheckBoxObject: TfrxCheckBoxObject;
    frxGradientObject: TfrxGradientObject;
    frxDotMatrixExport: TfrxDotMatrixExport;
    Designer: TfrxDesigner;
    Report: TfrxReport;
    frxTXTExport: TfrxTXTExport;
    frxHTMLExport: TfrxHTMLExport;
    frxXLSExport: TfrxXLSExport;
    frxPDFExport: TfrxPDFExport;
    fsScript: TfsScript;
    function DesignerSaveReport(Report: TfrxReport;
    SaveAs: Boolean): Boolean;
    procedure DataModuleCreate(Sender: TObject);
    private
    FActiveBlobField: TBlobField;
    FVariablesFr : TfrxVariables;

    procedure LoadFromBlobField(BlobFl: TBlobField);
    public
    procedure DesignReportFromBlobField(BlobFl: TBlobField; Caption: String);
    procedure ShowReportFromBlobField(BlobFl: TBlobField; Caption: String);
    procedure AddReportVar(pName :string; Value :Variant);

    end;

    var
    DmReport: TDmReport;

    implementation

    {$R *.dfm}

    procedure TDmReport.DesignReportFromBlobField(BlobFl: TBlobField;
    Caption: String);
    begin
    LoadFromBlobField(BlobFl);
    Report.FileName := Caption;
    Report.DesignReport;
    end;

    function TDmReport.DesignerSaveReport(Report: TfrxReport;
    SaveAs: Boolean): Boolean;
    var
    Stream: TMemoryStream;
    begin
    Result := False;
    if SaveAs then exit;
    Stream := TMemoryStream.Create;
    try
    Report.SaveToStream(Stream);
    Stream.Position := 0;
    TBlobField(FActiveBlobField).LoadFromStream(Stream);
    finally
    Stream.Free;
    end;
    Result := True;
    end;

    procedure TDmReport.LoadFromBlobField(BlobFl: TBlobField);
    var
    Stream: TMemoryStream;
    begin
    try
    FActiveBlobField := BlobFl;
    Stream := TMemoryStream.Create;
    try
    TBlobField(BlobFl).SaveToStream(Stream);
    Stream.Position := 0;
    if Stream.Size >0 then
    Report.LoadFromStream(Stream);
    finally
    Stream.Free;
    end;
    except end;
    Report.Variables.Assign(FVariablesFr);
    end;

    procedure TDmReport.ShowReportFromBlobField(BlobFl: TBlobField;
    Caption: String);
    begin
    LoadFromBlobField(BlobFl);
    Report.FileName := Caption;
    Report.ShowReport;
    end;

    procedure TDmReport.AddReportVar(pName: string; Value: Variant);
    begin
    FVariablesFr[pName] := Value;
    end;

    procedure TDmReport.DataModuleCreate(Sender: TObject);
    begin
    FVariablesFr := TfrxVariables.Create;
    end;
  • отредактировано 04:00
    Не удалось сохранить переменные в блобе.
    Из приведенного примера не понятно, где используется AddReportVar(pName: string; Value: Variant) , которая, явно, для этого и нужна.
    Или необходимо для переменных заводить доп. блоб-поле, где их и хранить?
  • отредактировано 04:00
    function LoadReportFromDataSet(DataSet: TpFIBDataSet): Boolean;
    var
    s: TMemoryStream;

    begin
    Result := False;
    try
    frxReport.Clear;
    s := TMemoryStream.Create;
    try
    TFIBBlobField(DataSet.FieldByName('Data')).SaveToStream(s);
    s.Position := 0;
    frxReport.LoadFromStream(s);
    finally
    s.Free;
    end;
    frxReport.ReportOptions.Name := DataSet.FieldByName('Title').AsString;
    frxReport.FileName := DataSet.FieldByName('Title').AsString;
    Result := True;
    except
    end;
    end;

    function SaveReportToDataSet(DataSet: TpFIBDataSet): Boolean;
    var
    s: TMemoryStream;

    begin
    Result := False;
    try
    DataSet.Edit;
    s := TMemoryStream.Create;
    try
    frxReport.SaveToStream(s, True, True);
    s.Position := 0;
    TFIBBlobField(DataSet.FieldByName('Data')).LoadFromStream(s);
    finally
    s.Free;
    end;

    DataSet.Post;
    Result := True;
    except
    DataSet.Cancel;
    end;
    end;

    У меня так. И никаких проблем.
  • visor123visor123 Днепропетровск
    отредактировано 04:00
    Eugenio написал:
    Не удалось сохранить переменные в блобе.
    Из приведенного примера не понятно, где используется AddReportVar(pName: string; Value: Variant) , которая, явно, для этого и нужна.
    Или необходимо для переменных заводить доп. блоб-поле, где их и хранить?
    Переменные сохранять надо отдельно.

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

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