📄 report_module.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 + -