?? untfunctions.pas
字號:
{*******************************************************}
{ 單元名: untFunctions.pas }
{ 創(chuàng)建日期:2006-01-06 9:07:22 }
{ 創(chuàng)建者 馬敏釗 QQ 22900104 }
{ 功能: 提供公共的方法 }
{ }
{*******************************************************}
unit untFunctions;
interface
//------------------------------------------------------------------------------
// 根據(jù)此配置文件決定編譯那些函數(shù)
//------------------------------------------------------------------------------
{$DEFINE Db} //數(shù)據(jù)庫操作函數(shù)
{$DEFINE File}//文件操作函數(shù)
{.$DEFINE Graph}//圖形操作函數(shù)
{$DEFINE dialog}//對話筐
{$DEFINE List}//列表
{$DEFINE Zlib}//壓縮
uses SysUtils
{$IFDEF dialog}
, dialogs
, Controls
{$ENDIF}
{$IFDEF Db}
, Contnrs
, Variants
, adodb, db
{$ENDIF}
{$IFDEF File}
, Windows
, Forms
{$ENDIF}
{$IFDEF Graph}
, Graphics
{$ENDIF}
{$IFDEF List}
, Classes
{$ENDIF}
{$IFDEF ZLib}
, ZLib
{$ENDIF}
;
//------------------------------------------------------------------------------
// 數(shù)據(jù)庫
//------------------------------------------------------------------------------
{$IFDEF Db}
const
CDb_State_NoneUsed = '';
CDb_State_EverUsed = -1;
CDb_State_CanUsed = 0;
//------------------------------------------------------------------------------
// 數(shù)據(jù)庫操作類
//------------------------------------------------------------------------------
type
{檢查ADO是否可用的線程}
TDBMrg = class;
TCheckThread = class(TThread)
private
CheckTime: Cardinal;
public
DbMrg: TDbmrg;
procedure Execute; override;
constructor Create(IsStop: boolean; IDbMrg: TDbmrg);
end;
TDBMrg = class
private
FConn: TADOConnection;
FPool: TStringList;
FName: Integer;
FAutoFreeConn: boolean;
FTotCount: Integer;
FThread_Check: TCheckThread;
public
{一個公共的BUff 啟動時未創(chuàng)建}
TepBuff: TADOQuery;
property TotCount: Integer read FTotCount write FTotCount;
constructor Create(IConStr: string; ICreateBuffCount: Integer = 5); overload;
constructor Create(IConn: TADOConnection; ICreateBuffCount: Integer = 5);
overload;
destructor Destroy; override;
{獲取一個ADO對象 可以指定名字 如果沒有名字 系統(tǒng)自己返回一合適的對象}
function GetAnQuery(IuserTime: integer = 1; Iname: string = ''): TADOQuery; overload;
function GetAnQuery(Iname: string): TADOQuery; overload;
{獲取自動增長的ID號碼}
function GetId(ItabName, IFieldName: string): Integer;
{獲取符合記錄的個數(shù)}
function GetCount(ItabName, IFieldName: string; Ivalue: variant): Cardinal;
overload;
function GetCount(ItabName: string): Cardinal; overload;
{根據(jù)字段名和值刪除表內(nèi)容}
procedure DeleteSomeThing(ItabName, IFieldName: string; Ivalue: Variant);
{讀取某個字段的值}
function GetSomeThing(ItabName, IGetField, IWhereField: string; Ivalue: Variant): variant;
{判斷是否已經(jīng)存在這個值}
function IsExitThis(ItabName, IFieldName: string; Ivalue: Variant): boolean;
{在數(shù)據(jù)集內(nèi)定位記錄}
function FindDataInDataSet(IData: TDataSet; IFieldName, IFieldValue: string; Iopt: TLocateOptions): boolean;
{執(zhí)行一個語句}
function ExecAnSql(Isql: string): Integer; overload;
function ExecAnSql(Isql: string; const Args: array of const): Integer; overload;
function ExecAnSql(IQueryRight: integer; Isql: string; const Args: array of const): Integer; overload;
{執(zhí)行一個查詢語句}
function OpenDataset(ISql: string): TADOQuery; overload;
{用指定的ADO執(zhí)行}
function OpenDataset(IadoName, ISql: string): TADOQuery; overload;
function OpenDataset(Iado: TADOQuery; ISql: string; const Args: array of const):
TADOQuery; overload;
function OpenDataset(ISql: string; const Args: array of const): TADOQuery; overload;
function OpenDataset(IQueryRight: integer; ISql: string; const Args: array of
const): TADOQuery; overload;
{釋放ADO使用權(quán)以便其它人員使用}
procedure BackToPool(Iado: TADOQuery); overload;
procedure BackToPool(IName: string); overload;
{加入一個由外部創(chuàng)建的ADO 幫它管理生命周期和重用}
procedure AddAnOutAdo(Iado: TADOQuery);
{為操作表預(yù)備一個ADO}
function Ready(ItabName: string; Iado: TADOQuery): TADOQuery; overload;
function Ready(ItabName: string; IQueryRight: integer = 1): TADOQuery; overload;
{打開一個表}
function OpenTable(ItabName: string; Iado: TADOQuery): TADOQuery; overload;
function OpenTable(ItabName: string; IQueryRight: integer = 1): TADOQuery; overload;
{檢查是否處于可修改狀態(tài)}
function CheckModState(IAdo: TADOQuery): boolean;
{安全保存}
function SafePost(Iado: TADOQuery): boolean;
{查詢總共有多少個ADOquery}
function PoolCount: Integer;
{空閑著的ADO數(shù)量}
function PoolFreeCount: Integer;
{獲取連接}
function GetConn: TADOConnection;
{獲取ACCESS連接字符串}
class function GetAccessConnStr(IDataSource: string; Ipsd: string = ''): string;
{獲取MSSQL連接字符串}
class function GetMsSQLConnStr(IDataSource, IAcc, Ipsd, IDataBase: string): string;
{獲取Oracle連接字符串}
class function GetOracleConnStr(IDataSource, IAcc, Ipsd: string): string;
{獲取Excel連接字符串}
class function GetExcelConnStr(IFileName: string): string;
{獲取Text連接字符串}
class function GetTextConnStr(IDBPath: string): string;
{獲取Dbf連接字符串}
class function GetDBFConnStr(IDBPath: string): string;
{獲取MySQl連接字符串}
class function GetMySqlConnStr(IDataSource, IDbName, IAcc, Ipsd: string): string;
end;
//------------------------------------------------------------------------------
// 一個全局的變量
//------------------------------------------------------------------------------
var
Gob_DBMrg: TDBMrg = nil;
{判斷變體是是空就返回0或者''}
function IsNullReturnint(Ivar: Variant): Integer;
function IsNullReturnFloat(Ivar: Variant): Double;
function IsNullReturnStr(Ivar: Variant): string;
{$ENDIF}
//------------------------------------------------------------------------------
// 對話筐
//------------------------------------------------------------------------------
{$IFDEF dialog}
{幾個常用的對話筐}
function QueryInfo(Info: string): Boolean;
procedure ErrorInfo(Info: string); overload;
procedure ErrorInfo(Info: string; const Args: array of const); overload;
procedure WarningInfo(Info: string);
procedure TipInfo(Info: string);
procedure ExceptTip(Info: string);
procedure ExceptionInfo(Info: string);
var
ShowDeBug: Boolean = True; {是否顯示Debug信息}
procedure DeBug(ICon: Variant); overload;
procedure DeBug(ICon: string; const Args: array of const); overload;
{$ENDIF}
//------------------------------------------------------------------------------
// 列表
//------------------------------------------------------------------------------
{$IFDEF List}
{清除列表}
procedure ClearList(IList: TStrings);
{添加到列表}
procedure AddList(Ilist: Tstrings; ICapTion: string; Iobj: TObject);
{獲取選中對象}
function GetObj(Ilist: TStrings; Iidx: Integer): TObject;
{分割字符串}
procedure GetEveryWord(S: string; E: TStrings; C: string);
{獲取文件名稱}
function GetOnlyFileName(IfileName: string): string;
{$ENDIF}
//------------------------------------------------------------------------------
// 圖形
//------------------------------------------------------------------------------
{$IFDEF Graph}
{RGBTODElphiColor}
function RGB2BGR(C: Cardinal): TColor;
{DelphiColorTORGB}
function BGR2RGB(C: TColor): Cardinal;
{$ENDIF}
//------------------------------------------------------------------------------
// 文件
//------------------------------------------------------------------------------
{$IFDEF File}
{文件是否在使用中}
function IsFileInUse(FName: string): Boolean;
{取Windows系統(tǒng)目錄}
function GetWindowsDir: string;
{取臨時文件目錄}
function GetWinTempDir: string;
{查找指定目錄下文件}
procedure FindFileList(Path, Filter: string; FileList: TStrings; ContainSubDir: Boolean);
{$ENDIF}
{$IFDEF ZLib}
procedure EnCompressStream(CompressedStream: TMemoryStream);
procedure DeCompressStream(CompressedStream: TMemoryStream);
{$ENDIF}
//------------------------------------------------------------------------------
// 公共函數(shù)
//------------------------------------------------------------------------------
{IFTHen}
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ''): string; overload;
function IfThen(AValue: Boolean; const ATrue: boolean; const AFalse: boolean): boolean; overload;
{*隨機(jī)字符串}
function RandomStr(aLength: Longint): string;
{*縮短路徑顯示}
function FormatPath(APath: string; Width: Integer): string;
{當(dāng)前項(xiàng)目的路徑}
function GetCurrPath: string;
{判斷是否都是數(shù)字}
function IsallNumber(IStr: string): boolean;
{獲取格式化的當(dāng)前時間}
function GetFormatTime: string;
{獲取格式化的當(dāng)前日期和時間}
function GetDocTime: string;
{獲取格式化的當(dāng)前日期}
function GetFormatDate: string;
{獲取格式化的當(dāng)前日期}
function GetDocDate: string;
{獲取日期和時間}
function GetFormatDateTime: string;
{設(shè)置系統(tǒng)時間}
function SetSystime(ATime: TDateTime): boolean;
{程序只運(yùn)行一個實(shí)列}
function AppRunOnce: Boolean;
{字符串簡單加密}
function Str_Encry(ISrc: string; key: string = 'mMz'): string;
{字符串簡單解密}
function Str_Decry(ISrc: string; key: string = 'mMz'): string;
{獲取硬盤剩余空間情況}
function GetDiskInfo(IdiskName: string): string;
{取文件長度}
function GetFileSize(FileName: string): Integer;
function GetFileSize64(const FileName: string): Int64;
implementation
{$IFDEF ZLib}
{-------------------------------------------------------------------------------
過程名: EnCompressStream
作者: 馬敏釗
日期: 2006.03.01
參數(shù): CompressedStream: TMemoryStream
返回值: 無
說明: 流壓縮函數(shù)
-------------------------------------------------------------------------------}
procedure EnCompressStream(CompressedStream: TMemoryStream);
var
SM: TCompressionStream;
DM: TMemoryStream;
Count: int64; //注意,此處修改了,原來是int
begin
if CompressedStream.Size <= 0 then exit;
CompressedStream.Position := 0;
Count := CompressedStream.Size; //獲得流的原始尺寸
DM := TMemoryStream.Create;
SM := TCompressionStream.Create(clMax, DM);
try
CompressedStream.SaveToStream(SM); //SourceStream中保存著原始的流
SM.Free; //將原始流進(jìn)行壓縮,DestStream中保存著壓縮后的流
CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count)); //寫入原始文件的尺寸
CompressedStream.CopyFrom(DM, 0); //寫入經(jīng)過壓縮的流
CompressedStream.Position := 0;
finally
DM.Free;
end;
end;
{-------------------------------------------------------------------------------
過程名: DeCompressStream
作者: 馬敏釗
日期: 2006.03.01
參數(shù): CompressedStream: TMemoryStream
返回值: 無
說明: 解壓縮函數(shù)
-------------------------------------------------------------------------------}
procedure DeCompressStream(CompressedStream: TMemoryStream);
var
MS: TDecompressionStream;
Buffer: PChar;
Count: int64;
begin
if CompressedStream.Size <= 0 then exit;
CompressedStream.Position := 0; //復(fù)位流指針
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//從被壓縮的文件流中讀出原始的尺寸
GetMem(Buffer, Count); //根據(jù)尺寸大小為將要讀入的原始流分配內(nèi)存塊
MS := TDecompressionStream.Create(CompressedStream);
try
MS.ReadBuffer(Buffer^, Count);
//將被壓縮的流解壓縮,然后存入 Buffer內(nèi)存塊中
CompressedStream.Clear;
CompressedStream.WriteBuffer(Buffer^, Count); //將原始流保存至 MS流中
CompressedStream.Position := 0; //復(fù)位流指針
finally
FreeMem(Buffer);
MS.Free;
end;
end;
{$ENDIF}
{-------------------------------------------------------------------------------
過程名: GetCurrPath
作者: 馬敏釗
日期: 2006.01.09
參數(shù): 無
返回值: String
說明: 獲取當(dāng)前項(xiàng)目的路徑
-------------------------------------------------------------------------------}
function GetCurrPath: string;
begin
Result := ExtractFilePath(ParamStr(0));
end;
{--------------------------------
過程名: IsallNumber
作者: mmz
日期: 2006.01.06
參數(shù): IStr: string
返回值: boolean
說明:
-------------------------------------------------------------------------------}
function IsallNumber(IStr: string): boolean;
var
i: Integer;
begin
if Length(IStr) = 0 then begin
Result := False;
Exit;
end;
Result := True;
for I := 1 to Length(IStr) do begin // Iterate
if not (IStr[i] in ['0'..'9']) then begin
Result := False;
Exit;
end;
end; // for
end;
{-------------------------------------------------------------------------------
過程名: GetDateTime
作者: 馬敏釗
日期: 2006.01.15
參數(shù): 無
返回值: String
說明: 獲取格式化的時間
-------------------------------------------------------------------------------}
function GetFormatTime: string;
begin
Result := FormatDateTime('hh:nn:ss', now);
end;
function GetDocTime: string;
begin
Result := FormatDateTime('hhnnss', Time);
end;
function GetFormatDate: string;
begin
Result := FormatDateTime('yyyy-mm-dd', Date);
end;
function GetDocDate: string;
begin
Result := FormatDateTime('yyyymmdd', Date);
end;
function GetFormatDateTime: string;
begin
Result := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
end;
function SetSystime(ATime: TDateTime): boolean;
var
ADateTime: TSystemTime;
yy, mon, dd, hh, min, ss, ms: Word;
begin
decodedate(ATime, yy, mon, dd);
decodetime(ATime, hh, min, ss, ms);
with ADateTime do begin
wYear := yy;
wMonth := mon;
wDay := dd;
wHour := hh;
wMinute := min;
wSecond := ss;
wMilliseconds := ms;
end;
Result := SetLocalTime(ADateTime);
// PostMessage(HWND_BROADCAST, WM_TIMECHANGE, 0, 0);
end;
{-------------------------------------------------------------------------------
過程名: AppRunOnce
作者: 馬敏釗
日期: 2006.02.28
參數(shù): 無
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -