📄 publicunit.pas
字号:
unit PublicUnit;
{
代码单元名称:系统公共代码单元
开发单位:大连理工大学计算机技术研究所软件工程研究室
时间:2001,1,30
}
interface
uses graphics, classes, ADOdb, QuickRpt, Qrctrls, Forms, Controls, Dialogs,
Sysutils, Inifiles, Windows, Registry, DBGrids, DB, Printers, EXCEL97,
OleCtrls, RC_ReadRightClass;
type
TPagePrintOrientation = (Vertical, Horizand);
TPageDesign = class
public
CServerName: string;
CDataBaseName: string;
CDataBaseUser: string;
CDBPassWord: string;
CTableName: string;
CSQLFileName: string;
CSqlString: TStrings;
TopFrameLine, BottomFrameLine, LeftFrameLine, RightFrameLine: boolean;
//报表边框线条
AddNo: Boolean; //是否需要行号
AddHGrid: Boolean; //报表加横线
AddSGrid: Boolean; //报表加竖线
ReportName: string; //报表表名
ReportTitleDeclare: string; //报表表头说明
ReportEndDeclare: string; //报表表尾说明
ReportBuilder: string; //报表制作人
ReportOthers: string; //报表其它内容
ReportPageHead: string; //报表页眉
ReportPageFoot: string; //报表页脚
ReportBodyHeadRowHeight: integer; //报表表头高度
ReportBodyRowHeight: integer; //报表表体高度
ReportPageFootHeight: integer; //报表页脚高度
ReportBodyColsWidth: TStrings; //报表表体每列宽度
PageLinesNumber: integer; //报表每页行数
ReportBodyAlignment: array of TAlignment; //报表表体对齐方式
ReportNameFont: TFont; //报表表名字体
ReportTitleDeclareFont: TFont; //报表表头说明字体
ReportHeadFont: TFont; //报表表头字体
ReportBodyFont: TFont; //报表表体字体
ReportEndDeclareFont: TFont; //报表表尾说明字体
ReportPageHeadFont: TFont; //报表页眉字体
ReportPageFootFont: TFont; //报表页脚字体
ReportPageTopMargin: integer; //报表上页边距
ReportPageBottomMargin: integer; //报表下页边距
ReportPageLeftMargin: integer; //报表左页边距
ReportPageRightMargin: integer; //报表右页边距
ReportPrintDate: Boolean; //报表打印日期
ReportPageNumber: Boolean; //报表页号
ReportOrientation: TPagePrintOrientation; //True为横打 False为纵打
CPrintPreviewADOQuery: TADOQuery;
constructor Create;
destructor Destroy;
end;
function PreViewReportFile(MyPageDesign: TPageDesign): Boolean;
function PrintReportFile(MyPageDesign: TPageDesign): Boolean;
function OpenReportFileDataSource(CServerName, CDataBaseName, CTableName:
string;
CSQLFileName: string; CSqlString: TStrings; var CPrintPreviewADOQuery:
TADOQuery): Boolean; overload;
function OpenReportFileDataSource(MyPageDesign: TPageDesign; var
CPrintPreviewADOQuery: TADOQuery): Boolean; overload;
function CreateTRPTFileForReportFile(MyPageDesign: TPageDesign;
CPrintPreviewADOQuery: TADOQuery;
FieldNameE, FieldNameC: TStrings; var CReport: TQuickRep): Boolean;
function ReadFieldCName(CServerName, CDataBaseName, CTableName: string;
var FieldNameE, FieldNameC: TStrings): Boolean;
function GetTableEName(CName: string): string;
function GetTableCName(EName: string): string;
function CheckDBServer(DbServerName: string): Boolean;
function SetDisplayMode(X, Y: word): Boolean;
function GetScreenWidth(): longint;
function GetScreenHeight(): longint;
function ReadFromRegist(var username: string; var password: string): Boolean;
function WriteToRegist(username, password: string): Boolean;
procedure CreateDirInCurrentApp(DirName: string);
function WholePathOfDir(DirName: string): string;
function WholePathOfReportFile(FileName: string): string;
procedure CreateReportTemplate(MyPageDesign: TPageDesign; TemplateName: string);
procedure CreateReportInstance(MyPageDesign: TPageDesign; TemplateName: string);
function ExistDTable(ConStr: WideString; TTable: string): boolean;
procedure SetPageDesignColsWidth(MyPageDesign: TPageDesign; DbGrid: TDbGrid);
procedure GetFieldsName(var FieldsID: TStrings; var FNames: TStrings; DBGrid:
TDBGrid);
function GetSelectClause(ADOQuery: TADOQuery): string;
function GetOtherClauseWithoutSelect(ADOQuery: TADOQuery): string;
procedure ResetADOQueryClause(ADOQuery: TADOQuery; FieldsID, FieldsName:
TStrings; DBGrid: TDBGrid);
procedure SetDBGridFieldsDisplay(var ADbGrid: TDbGrid);
function GetReportEName(CName: string): string;
procedure OutPuttoExcel(ADOQuery: TADOQuery);
function GetSaveReportDir: string;
procedure GetSystemInformation;
function WriteToHistroy(FuncName: string; OperDate: TDate; OperTime: TTime;
Operation, Operater: string): Boolean;
function EncryFunc(ss: string): string;
function UnEncryFunc(ss: string): string;
function RefreshDBDictionery(DicName: string): Boolean; //从对应字段给字典充值
function FieldTranslate(TableName, SourceFieldName, SourceFieldValue,
DisFieldName: string): string;
procedure GetReadOnlyFieldNames(TableCName: string; var FieldNames: TStrings);
//获取当前表的只读字段
function ExecuteSQLStatement(ADOQuery: TADOQuery): Boolean;
function CreateXSXX(BeginDateTime, EndDateTime: TDateTime; FileName: string):
Boolean;
function CreateSKXX(BeginDateTime, EndDateTime: TDateTime; FileName: string):
Boolean;
var
ServerName: string;
DbName: string;
DbCName: string;
DBUser: string;
DBPass: string;
UserName: string;
UserPass: string;
CloseApp: Boolean;
DisplayWidth, DisplayHeight: Word;
BZName: string;
BzLx: integer;
IfSaveClick: Boolean;
IfDeleteClick: Boolean;
IsErrorFlag: Boolean;
YsJe: Double;
IsPassValDay:Boolean;
YsCqJe:Double;
Function_DB_ReadRight: TFunction_DB_ReadRight;
xtwh: array[0..3] of string = ('数据备份', '数据恢复', '用户管理',
'日志管理');
qtsc: array[0..2] of string = ('设备配置', '数据采集', '盒饭销售');
ywgl: array[0..4] of string = ('设备管理', '客户管理', '部门管理', '职员管理',
'综合收入');
tjfx: array[0..3] of string = ('售餐统计', '售卡统计', '趋势图形',
'历史结果');
implementation
uses GQ_DataModule, main, RP_Page, Card_FirBack, Card_SecSell;
{-----------------------------报表页面设置类的定义------------------------------------}
constructor TPageDesign.Create;
begin
TopFrameLine := True;
BottomFrameLine := True;
LeftFrameLine := True;
RightFrameLine := True;
AddHGrid := True;
AddSGrid := True;
ReportPrintDate := False;
ReportPageNumber := True;
ReportOrientation := Vertical;
ReportPageTopMargin := 10;
ReportPageBottomMargin := 10;
ReportPageLeftMargin := 10;
ReportPageRightMargin := 10;
ReportBodyHeadRowHeight := 40;
ReportBodyRowHeight := 40;
ReportPageFootHeight := 40;
PageLinesNumber := 24;
ReportBodyColsWidth := TStringList.Create;
ReportNameFont := TFont.Create;
ReportTitleDeclareFont := TFont.Create;
ReportHeadFont := TFont.Create;
ReportBodyFont := TFont.Create;
ReportEndDeclareFont := TFont.Create;
ReportPageHeadFont := TFont.Create;
ReportPageFootFont := TFont.Create;
with ReportNameFont do
begin
Name := '黑体';
Size := 14;
end;
with ReportTitleDeclareFont do
begin
Name := '宋体';
Size := 9
end;
ReportHeadFont.Assign(ReportTitleDeclareFont);
ReportBodyFont.Assign(ReportTitleDeclareFont);
ReportEndDeclareFont.Assign(ReportTitleDeclareFont);
ReportPageHeadFont.Assign(ReportTitleDeclareFont);
ReportPageFootFont.Assign(ReportTitleDeclareFont);
ReportPageHeadFont.Assign(ReportTitleDeclareFont);
ReportPageFootFont.Assign(ReportTitleDeclareFont);
CPrintPreviewADOQuery := TADOQuery.Create(nil);
end;
destructor TPageDesign.Destroy;
begin
ReportBodyColsWidth.Free;
ReportNameFont.Free;
ReportTitleDeclareFont.Free;
ReportHeadFont.Free;
ReportBodyFont.Free;
ReportEndDeclareFont.Free;
CPrintPreviewADOQuery.Free;
end;
{-------------------------------------Report Public Functions--------------------}
{
函数名称:报表文件打印预览
函数功能:打印预览报表文件
返回参数:True,打印预览实现;False,未能实现打印预览
入口参数:
CServerName string:数据库服务器名称
CDataBaseName string:数据库名称
CTableName string:数据库表名称(只有打印预览数据库表是为非空值)
CReportName string:报表标题
CRptNameLabelFont TFont:报表标题字体
CRptDBGFont TFont:报表表体字体
CSQLFileName string:数据库查询文件完整文件名(只有打印预览数据库查询文件时为非空值)
CSqlString TStrings:数据库表查询语句(只有打印预览查询SQL语句时为非空值)
CAddHGrid Boolean:是否需要横向报表表格
CAddSGrid Boolean:是否需要竖向报表表格
}
function PreViewReportFile(MyPageDesign: TPageDesign): Boolean;
var
CReport: TQuickRep;
CPrintPreviewADOQuery: TADOQuery;
FieldNameE, FieldNameC: TStrings;
FrmRP_Page: TFrmRP_Page;
begin
Result := False;
if ((MyPageDesign.CTableName = '') and (MyPageDesign.CSQLFileName = '') and
(MyPageDesign.CSqlString.Count = 0)) then
Exit;
{spring 2001-9-13}
if not OpenReportFileDataSource(MyPageDesign, CPrintPreviewADOQuery) then
Exit;
{-spring 2001-9-13}
{if not OpenReportFileDataSource(MyPageDesign.CServerName,MyPageDesign.CDataBaseName,MyPageDesign.CTableName,MyPageDesign.CSQLFileName,
MyPageDesign.CSqlString,CPrintPreviewADOQuery) then Exit;}
FieldNameE := TStringList.Create;
FieldNameC := TStringList.Create;
ReadFieldCName(MyPageDesign.CServerName, MyPageDesign.CDataBaseName,
MyPageDesign.CTableName, FieldNameE, FieldNameC);
if not CreateTRPTFileForReportFile(MyPageDesign, CPrintPreviewADOQuery,
FieldNameE, FieldNameC, CReport) then
Exit;
Result := True;
FieldNameE.Free;
FieldNameC.Free;
// CReport.Preview;
Application.CreateForm(TFrmRP_Page, FrmRP_Page);
FrmRP_Page.CReport := CReport;
FrmRP_Page.ShowModal;
end;
{
函数名称:报表文件打印
函数功能:打印报表文件
返回参数:True,打印实现;False,未能实现打印
入口参数:
CServerName string:数据库服务器名称
CDataBaseName string:数据库名称
CTableName string:数据库表名称(只有打印数据库表是为非空值)
CReportName string:报表标题
CRptNameLabelFont TFont:报表标题字体
CRptDBGFont TFont:报表表体字体
CSQLFileName string:数据库查询文件完整文件名(只有打印数据库查询文件时为非空值)
CSqlString TStrings:数据库表查询语句(只有打印查询SQL语句时为非空值)
CAddHGrid Boolean:是否需要横向报表表格
CAddSGrid Boolean:是否需要竖向报表表格
}
function PrintReportFile(MyPageDesign: TPageDesign): Boolean;
var
CReport: TQuickRep;
CPrintPreviewADOQuery: TADOQuery;
FieldNameE, FieldNameC: TStrings;
begin
Result := False;
if ((MyPageDesign.CTableName = '') and (MyPageDesign.CSQLFileName = '') and
(MyPageDesign.CSqlString.Count = 0)) then
Exit;
{spring 2001-9-13}
if not OpenReportFileDataSource(MyPageDesign, CPrintPreviewADOQuery) then
Exit;
{-spring 2001-9-13}
{if not OpenReportFileDataSource(MyPageDesign.CServerName,MyPageDesign.CDataBaseName,MyPageDesign.CTableName,MyPageDesign.CSQLFileName,
MyPageDesign.CSqlString,CPrintPreviewADOQuery) then Exit;}
FieldNameE := TStringList.Create;
FieldNameC := TStringList.Create;
ReadFieldCName(MyPageDesign.CServerName, MyPageDesign.CDataBaseName,
MyPageDesign.CTableName, FieldNameE, FieldNameC);
if not CreateTRPTFileForReportFile(MyPageDesign, CPrintPreviewADOQuery,
FieldNameE, FieldNameC, CReport) then
Exit;
Result := True;
FieldNameE.Free;
FieldNameC.Free;
CReport.Print;
end;
function OpenReportFileDataSource(CServerName, CDataBaseName, CTableName:
string;
CSQLFileName: string; CSqlString: TStrings; var CPrintPreviewADOQuery:
TADOQuery): Boolean;
var
PrintPreviewADOQuery: TADOQuery;
ss: string;
begin
Result := False;
Screen.Cursor := crHourGlass;
if ((CTableName = '') and (CSQLFileName = '') and (CSqlString.Count = 0)) then
Exit;
PrintPreviewADOQuery := TADOQuery.Create(Application);
with PrintPreviewADOQuery do
begin
Close;
Sql.Clear;
if CTableName <> '' then
begin
ss := 'Provider=SQLOLEDB.1;Persist Security Info=False;Password=' +
PublicUnit.DBPass + ';User ID=' + PublicUnit.DBUser +
';Initial Catalog=';
ss := ss + PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;
// ss:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='+CDataBaseName;
ConnectionString := ss;
Sql.Add('Select *');
Sql.Add('From "' + CTableName + '"')
end
else if CSqlFileName <> '' then
begin
ss := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' +
PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
';Initial Catalog='
+ PublicUnit.DbName;
ss := ss + ';Data Source=' + PublicUnit.ServerName;
ConnectionString := ss;
Sql.LoadFromFile(CSQLFileName);
end
else
begin
ss := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' +
PublicUnit.DBUser + ';Password=' + PublicUnit.DBPass +
';Initial Catalog=';
ss := ss + PublicUnit.DbName + ';Data Source=' + PublicUnit.ServerName;
ConnectionString := ss;
Sql.Assign(CSqlString);
end;
if not ExecuteSQLStatement(PrintPreviewADOQuery) then
begin
Screen.Cursor := crDefault;
ShowMessage('无法打开指定的数据库查询文件,请与系统管理员联系');
Free;
Exit;
end;
end;
CPrintPreviewADOQuery := PrintPreviewADOQuery;
Result := True;
Screen.Cursor := crDefault;
end;
function OpenReportFileDataSource(MyPageDesign: TPageDesign; var
CPrintPreviewADOQuery: TADOQuery): Boolean; overload;
var
PrintPreviewADOQuery: TADOQuery;
TempDbGrid: TDBGrid;
TempDataSource: TDataSource;
ss: string;
i: integer;
begin
Result := False;
Screen.Cursor := crHourGlass;
if ((MyPageDesign.CTableName = '') and (MyPageDesign.CSQLFileName = '') and
(MyPageDesign.CSqlString.Count = 0)) then
Exit;
ss :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=';
ss := ss + MyPageDesign.CDataBaseName + ';Data Source=' +
MyPageDesign.CServerName + '';
PrintPreviewADOQuery := TADOQuery.Create(Application);
TempDbGrid := TDBGrid.Create(Application);
TempDataSource := TDataSource.Create(Application);
TempDataSource.DataSet := PrintPreviewADOQuery as TDataSet;
TempDbGrid.DataSource := TempDataSource;
with PrintPreviewADOQuery do
begin
Close;
ConnectionString := ss;
Sql.Clear;
if MyPageDesign.CTableName <> '' then
begin
Sql.Add('Select *');
Sql.Add('From "' + MyPageDesign.CTableName + '"')
end
else if MyPageDesign.CSqlFileName <> '' then
begin
Sql.LoadFromFile(MyPageDesign.CSQLFileName);
end
else
begin
Sql.Assign(MyPageDesign.CSqlString);
end;
if not ExecuteSQLStatement(PrintPreviewADOQuery) then
begin
Screen.Cursor := crDefault;
ShowMessage('无法打开指定的数据库查询文件,请与系统管理员联系');
Free;
Exit;
end;
end;
CPrintPreviewADOQuery := PrintPreviewADOQuery;
{spring 2001-9-13}
// MyPageDesign.ReportBodyColsWidth.Clear;
if MyPageDesign.ReportBodyColsWidth.Count = 0 then
for i := 0 to CPrintPreviewADOQuery.FieldCount - 1 do
MyPageDesign.ReportBodyColsWidth.Add(IntToStr(TempDbGrid.Columns[i].Width));
TempDbGrid.Free;
TempDataSource.Free;
{-spring 2001-9-13}
Result := True;
Screen.Cursor := crDefault;
end;
function CreateTRPTFileForReportFile(MyPageDesign: TPageDesign;
CPrintPreviewADOQuery: TADOQuery;
FieldNameE, FieldNameC: TStrings; var CReport: TQuickRep): Boolean;
var
AReport: TQuickRep;
MyColumnHeaderLabel: TQRLabel;
MyDetailQRDBText: TQRDBText;
MyPage: TQRSysData;
MyReportNameLabel: TQRLabel;
MyReportTitleDeclareLabel: TQRLabel;
MyReportEndDeclareLabel: TQRLabel;
MyReportBuilderLabel: TQRLabel;
MyReportOthersLabel: TQRLabel;
MyReportPageHeadLabel: TQRLabel;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -