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

📄 publicunit.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 4 页
字号:
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 + -