⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 report_module.pas

📁 超信人力资源管理系统,一个用Delphi编写的人事管理系统
💻 PAS
字号:
{******************************************************************************}
{ @UnitName    : Report_Module                                                 }
{ @Project     : DebugFMS                                                      }
{ @Copyright   : Francis                                                      }
{ @Author      : Francis                                                       }
{ @CreateDate  : 2003-07-03 13:41:48                                           }
{ @LastUpdate  : 2003-07-03 13:41:48 by Francis                                }
{ @Description :                                                               }
{ @Comment     :                                                               }
{ @History     :                                                               }
{******************************************************************************}
unit Report_Module;

interface

uses
  SysUtils, Classes, Forms,
  RMD_ADO, RM_Desgn, RM_wwrtf, RM_DCtrl, RM_e_pdf, RM_e_xls,
  RM_e_Graphic, RM_e_Jpeg, RM_e_htm, RM_e_csv, RM_e_main, RM_e_rtf,
  RM_class, RM_e_txt, RM_DBChart, RM_chart, RM_Cross, RM_AngLbl, RM_rrect,
  RM_BarC, RM_shape, RM_chbox, RM_rich, RM_GridView, RM_dset, RM_dbset, DB,
  ADODB, Dialogs, RM_pars, RM_ole, Controls;

type
  TReportModule = class(TDataModule)
    RMReport: TRMReport;
    RMGridObject: TRMGridObject;
    RMRichObject: TRMRichObject;
    RMCheckBoxObject: TRMCheckBoxObject;
    RMShapeObject: TRMShapeObject;
    RMBarCodeObject: TRMBarCodeObject;
    RMRoundRectObject: TRMRoundRectObject;
    RMAngledLabelObject: TRMAngledLabelObject;
    RMCrossObject: TRMCrossObject;
    RMTOWord: TRMRTFExport;
    RMTOHTML: TRMHTMExport;
    RMTOJPG: TRMJPEGExport;
    RMTOXLS: TRMXLSExport;
    RMDesigner: TRMDesigner;
    RMDADOCom: TRMDADOComponents;
    DSReport: TDataSource;
    RMTOOLE: TRMOLEObject;
    RMDBDataSet: TRMDBDataSet;
    procedure RMDesignerSaveReport(Report: TRMReport;
      var ReportName: string; SaveAs: Boolean; var Saved: Boolean);
    procedure DataModuleCreate(Sender: TObject); //保存设计的报表
  private
    FormID, Operator: string; //保存窗体ID,与操作者
    IsNew: Boolean; //保存是否是新增操作

    { Private declarations }
  public
    { Public declarations }
    procedure NewReport(AFormID, AOperator: string); //新建报表
    procedure EditReport(AFormID, ReportName, AOperator: string); //修改报表
    function  GetReportList(AformID: string): TstringList; //取得指定FormID的报表列表
    procedure DeleteReport(AFormID, ReportName: string); //删除报表
    procedure PreviewReport(AFormID, ReportName: string); //预览报表
    procedure PrintReport(AFormID, ReportName: string); //列印报表
    procedure SetReportVar(Report: TRMReport); //给报表赋变量值
    procedure RenameReport(AFormID, ReportName, NewReportName: string); //给报表更名
    procedure CopyReport(AFormID, ReportName, NewReportName: string);

  end;

var
  ReportModule: TReportModule;

implementation

uses U_data, U_main;

{$R *.dfm}

{ TReportModule }

//删除报表操作

procedure TReportModule.DeleteReport(AFormID, ReportName: string);
begin
  Screen.Cursor := crHourGlass;
  try
    IsNew := False;
    FormID := AFormID;

    with U_data.DM.ADODataSetReport do
    begin
      if Active then close;
      CommandText := 'select FormID ,ReportName , ReportData,ReportSQL, ReportMemo , ModiTime , Operator from TB_Report  where FormID=:FormID and rtrim(ReportName)=:ReportName';
      Parameters.ParamByName('FormID').Value := FormID;
      Parameters.ParamByName('ReportName').Value := ReportName;
      Active := true;
      if not IsEmpty then
      begin
       if MessageDlg('确定要删除这个报表吗?', mtConfirmation, [mbYes,mbNo], 0) in [mrYes] then
        Delete;
      end
      else
      begin
        raise Exception.create('对不起,您所指定的报表不存在!');
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

//编辑报表操作

procedure TReportModule.EditReport(AFormID, ReportName, AOperator: string);
begin
  Screen.Cursor := crHourGlass;
  try
    IsNew := False;
    FormID := AFormID;
    Operator := AOperator;

    with U_data.DM.ADODataSetReport do
    begin
      if Active then close;
      CommandText := 'select FormID , ReportName,ReportData,ReportSQL,ReportMemo,ModiTime, Operator from TB_Report where FormID=:FormID and rtrim(ReportName)=:ReportName';
      Parameters.ParamByName('FormID').Value := FormID;
      Parameters.ParamByName('ReportName').Value := ReportName;
      Active := true;
      if not IsEmpty then
      begin
        RMReport.LoadFromBlobField(TBlobField(FieldByName('ReportData')));
        RMReport.FileName := ReportName;
        SetReportVar(RMReport);
        RMReport.DesignReport;
      end else
      begin
        raise Exception.create('对不起,您所指定的报表不存在!');
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;
//得到指定的报表列表

function TReportModule.GetReportList(AformID: string): TstringList;
begin
  Screen.Cursor := crHourGlass;
  try
    Result := TStringList.Create;
    with U_data.DM.Adodatasetreport do
    begin
      if Active then Close;
      CommandText := 'select FormID,ReportName,ReportData,ReportSQL,ReportMemo,ModiTime,Operator from TB_Report where FormID=:FormID ';
      Parameters.ParamByName('FormID').Value := AformID;
      Open;
      while not Eof do
      begin
        Result.Add(Trim(fieldByName('ReportName').AsString));
        Next;
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;


//在指定的窗体内新增报表

procedure TReportModule.NewReport(AFormID, AOperator: string);
begin
  Screen.Cursor := crHourGlass;
  try
    IsNew := True;
    FormID := AFormID;    //FORMname给参数FORMID付值,
    Operator := AOperator;     //..
    with U_data.DM.ADODataSetReport do
    begin
      if not Active then
      begin
        CommandText := 'select FormID  , ReportName , ReportData,ReportSQL, ReportMemo, ModiTime, Operator from TB_Report';
        Active := true;
      end;
    end;

    RMReport.NewReport;
    RMDBDataSet.DataSet:=U_data.DM.ADOReport;
    RMReport.DesignReport;
  finally
    Screen.Cursor := crDefault;
  end;

end;





//预览指定的窗体 报表

procedure TReportModule.PreviewReport(AFormID, ReportName: string);
begin
  Screen.Cursor := crHourGlass;
  try
    FormID := AFormID;
    with U_data.DM.ADODataSetReport do
    begin
      if Active then close;
      CommandText := 'select FormID  , ReportName , ReportData,ReportSQL, ReportMemo , ModiTime , Operator from TB_Report where FormID=:FormID and rtrim(ReportName)=:ReportName';
      Parameters.ParamByName('FormID').Value := FormID;
      Parameters.ParamByName('ReportName').Value := ReportName;
      Active := true;
      if not IsEmpty then
      begin
        RMReport.LoadFromBlobField(TBlobField(FieldByName('ReportData')));
        SetReportVar(RMReport);
        if U_data.DM.ADOReport.Active then U_data.DM.ADOReport.Active:=false;
        U_Data.DM.ADOReport.CommandText:=FieldByName('ReportSql').AsString;  //读取SQL语句
        RMDBDataSet.DataSet:=Dm.ADOReport;//很关键
        Showmessage(FieldByName('ReportSql').AsString);
        U_data.DM.ADOReport.Open;
        RMReport.ShowReport;
      end else
      begin
        raise Exception.create('对不起,您所指定的报表不存在!');
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

//打印指定窗表名的报表

procedure TReportModule.PrintReport(AFormID, ReportName: string);
begin
  Screen.Cursor := crHourGlass;
  try
    FormID := AFormID;

    with U_data.DM.ADODataSetReport do
    begin
      if Active then close;
      CommandText := 'select FormID  , ReportName , ReportData,ReportSQL, ReportMemo, ModiTime , Operator from TB_Report where FormID=:FormID and rtrim(ReportName)=:ReportName';
      Parameters.ParamByName('FormID').Value := FormID;
      Parameters.ParamByName('ReportName').Value := ReportName;
      Active := true;
      if not IsEmpty then
      begin
        RMReport.LoadFromBlobField(TBlobField(FieldByName('ReportData')));
        SetReportVar(RMReport); //设置RM的当前操作人变量
        RMReport.PrintReport;
      end else
      begin
        raise Exception.create('对不起,您所指定的报表不存在!');
      end;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;


//重命名报表功能

procedure TReportModule.RenameReport(AFormID, ReportName,
  NewReportName: string);
begin

  FormID := AFormID;

  with U_data.DM.ADODataSetReport do
  begin
    if Active then close;
    CommandText := 'select FormID  , ReportName , ReportData,ReportSQL, ReportMemo,ModiTime , Operator from TB_Report where FormID=:FormID and rtrim(ReportName)=:ReportName';
    Parameters.ParamByName('FormID').Value := FormID;
    Parameters.ParamByName('ReportName').Value := ReportName;
    Active := true;
    if not IsEmpty then
    begin
      edit;
      if NewReportName <> '' then
        FieldByName('ReportName').AsString := NewReportName;
      post; //给报表更名
    end else
    begin
      raise Exception.create('对不起,您所指定的报表不存在!');
    end;
  end;

end;


//保存设计的报表

procedure TReportModule.RMDesignerSaveReport(Report: TRMReport;
  var ReportName: string; SaveAs: Boolean; var Saved: Boolean);  //保存报表
begin
  Screen.cursor := crHourGlass;
  try
    if Saved and not SaveAs then
    begin
      saved := false;
//    Exit;
    end;

    try
      if IsNew or SaveAs then
      begin
        if SaveAs and (MessageDlg('如果你不选择YES,报表将会另存为一本地文件!' + #13 + #10 + '选择YES,则报表会存在数据库中!', mtInformation, [mbYes, mbNo], 0) = mrYes) then
        begin
          ReportName := InputBox('输入', '请输入新报表的名称!', ReportName);
          Report.SaveToFile(Getcurrentpath + ReportName + '*.rmf');
          MessageDlg('文件已经储存於可执行文件的当前目录下!', mtInformation, [mbOK], 0);
          exit;
        end;
        ReportName := InputBox('输入', '请输入新报表的名称!', ReportName);
        U_data.DM.ADODataSetReport.Append;
      end else
        U_data.DM.ADODataSetReport.Edit;

      with U_data.DM.ADODataSetReport do //储存当前报表信息
      begin
        FieldByName('FormID').AsString := FormID;
        FieldByName('ReportName').AsString := ReportName;
        Fieldbyname('ReportSQL').AsString:=U_data.DM.ADOReport.CommandText;//保存SQL 
        FieldByName('Operator').AsString := Operator;
        FieldByName('ModiTime').AsDateTime := Date;
        Report.SaveToBlobField(TBlobField(FieldByName('ReportData')));
        Post;
      end;
    except
      saved := false;
    end;
    Saved := true;
  finally
    Screen.Cursor := crDefault;
  end;

end;


//

procedure TReportModule.SetReportVar(Report: TRMReport);
begin
  RMVariables['UserName'] := LOGIN_NAME;
  RMVariables['UserID'] := LOGIN_code;
end;

procedure TReportModule.CopyReport(AFormID, ReportName, NewReportName: string);
var CommandText: string;
begin

  FormID := AFormID;
  CommandText := 'insert into TB_Report(FormID,ReportName,ReportData,ReportSQL,ReportMemo) select FormID,%s,ReportData,ReportMemo from TB_Report where FormID=%s and ReportName=%s';
  CommandText := Format(CommandText, [QuotedStr(NewReportName), QuotedStr(AFormID), QuotedStr(ReportName)]);
  U_data.DM.ADODataSetReport.Connection.Execute(CommandText, cmdText, []);

end;



procedure TReportModule.DataModuleCreate(Sender: TObject);
begin
  RMDBDataSet.DataSet := M_TABLE;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -