📄 pubvar.pas
字号:
unit PubVar;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, DbTables, StdCtrls, ExtCtrls, Buttons, Dialogs,Registry,Db,
ComCtrls;
Function AllTrim(strtmp:string):string;
Function HandelException(E: Exception):Integer;
Function To_Yesterday(Today:Tdate):Tdate;
FUNCTION ISINT(STR:STRING):BOOLEAN;
FUNCTION ISFLOAT(STR:STRING):BOOLEAN;
Procedure PreviousMonth(CurrMonth:string;MonNum:integer; var LYear:string;var LMonth:string);
FUNCTION MonthDay(YY,MM:integer):integer;
FUNCTION MonthLastDate(YY,MM:integer):Tdate;
const
cTreeCodeFormat='122222'; //编码格式。
cTreeMaxLevel=6;
cTreeRootTxt='单位字典' ;
var
Guser: String; //用户
gLoginName: String; //当前登录的用户名
GLogInTime: TDatetime; //登录功能模块的时间,取服务器的系统时间, 退出时写日志用
GDwName: String[40]= ''; {当前使用程序的单位}
guserDep: String[20]; //用户单位
gDBMS: String[20]; //数据库名
gBackupTables: String[20]; //备份表名
gCurVerNo: String[4]; //当前版本号
gVerDate: String[20]; //版本日期
gBackupFile: String; //备份文件
gBackupDate: String; //备份日期
gUpdatedFlag: String[1];//更改标志
gUpdatedFDate: String[20];//更改日期
gNodelevel: integer; // 树节点层次
gNodeID: String; // 树节点ID
gNode: ttreenode; //当前节点
mustIMP:boolean;
SysIni: TRegIniFile;
implementation
USES
dataModel;
Function AllTrim(strtmp:string):string;
var s1:string;
begin
s1:=Strtmp;
WHile True Do begin
if Copy(s1,1,1)=' ' Then
delete(s1,1,1)
else
Break;
end;
WHile True Do begin
if Copy(s1,length(s1),1)=' ' Then
delete(s1,length(s1),1)
else
Break;
end;
Alltrim:=s1
end;
Function HandelException( E: Exception):Integer;
{返回值分三种: 0:正常错误,继续执行
1:非法错误,退出当前过程
2:无权限,停止运行当前模块
3:其它错,交由系统处理,'RAISE'
}
var tmp,tmp1:String;
tmpstr:PChar;
i,i2:Integer;
begin
tmp:=E.Message;
tmp[length(tmp)+1]:=#0;
if E.Message='At end of table' Then
begin
result:=0;
exit;
end;
i:=pos('] SQL',tmp);
if i<>0 Then
begin
tmpstr:=@tmp[i+2];
tmp1:=strpas(tmpstr);
i:=pos('N',tmp1);
tmpstr[i+1]:=#0;
tmp:=strpas(tmpstr);
end;
if AllTrim(tmp)='SQL1403N' Then
begin
application.MessageBox('错误的用户名和口令!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
if AllTrim(tmp)='SQL0567N' Then
begin
application.MessageBox('错误的用户名和口令!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
if Alltrim(tmp)='SQL0551N' Then
begin
application.MessageBox('抱歉!您尚不具备当前的操作权限!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
if Alltrim(tmp)='SQL0204N' Then
begin
application.MessageBox('抱歉!您选的表不存在!','操作错误',mb_iconerror);
ShowMessage(E.Message);
Result:=2;
Exit;
end;
if Alltrim(tmp)='SQL1042C' Then
begin
application.MessageBox('程序无法继续进行,请检测操作系统!'+#13+'建议热启动后重新运行本程序!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
if AllTrim(tmp)='SQL1046N' Then
begin
application.MessageBox('错误的用户名和口令!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
//以下是字段不能为空错误
i:=pos('Field',tmp);
i2:=pos('must have a value',tmp);
if ((i<>0) and (i2<>0)) Then
begin
application.MessageBox('标记为黄色的项目必须输入,不能为空,请检查后输入正确的值!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
//以下是表或视图不存在错误
i:=pos('ORA-00942',tmp);
if (i<>0) Then
begin
Result:=942;
Exit;
end;
//以下是违反唯一性限制错误
i:=pos('ORA-00001',tmp);
if (i<>0) Then
begin
application.MessageBox('刚才输入的单位内码或单位编码已经存在,请检查后输入正确的新值!','操作错误',mb_iconerror);
Result:=2;
Exit;
end;
application.MessageBox('数据库操作有误,请检查您的数据!'+#13+'或记录下面的错误并和作者联系!','操作错误',mb_iconerror);
ShowMessage(E.Message);
Result:=1;
end;
//根据当前的字符串计算出前一个月
Procedure PreviousMonth(CurrMonth:string;MonNum:integer; var LYear:string;var LMonth:string);
VAR
Year, Month: integer;
CurrDate, PrevDate: TDateTime;
begin
Year := StrtoInt(Copy(Currmonth,1,4));
Month := StrToInt(Copy(Currmonth, 6,2));
CurrDate :=EncodeDate(Year, Month, 1);
PrevDate :=IncMonth(CurrDate, MonNum);
LYear := FormatDateTime( 'YYYY', PrevDate);
LMonth := FormatDateTime( 'MM', PrevDate);
end;
{*************************************************
计算昨天
**************************************************}
Function To_Yesterday(Today:Tdate):Tdate;
VAR
YY,MM,DD :Word;
BEGIN
DecodeDate(Today, YY,MM,DD);
IF DD>1 THEN
DD := DD-1
ELSE //月份-1
BEGIN
IF MM >1 THEN
MM :=MM -1
ELSE
BEGIN
MM := 12;
YY := YY -1;
END;
dd :=MonthDay(YY,mm);
END;
Result :=EncodeDate(YY,MM,DD);
END;
{*****************************************
计算每月天数
******************************************
}
FUNCTION MonthDay(YY,MM:integer):integer;
begin
CASE MM OF
1,3,5,7,8,10,12:
Result:=31;
4,6,9,11:
Result:=30;
2:
IF ISLEAPYEAR(YY) THEN
Result:=29
ELSE
Result:=28;
END;
end;
{*****************************************
计算每月的最后一天
******************************************
}
FUNCTION MonthLastDate(YY,MM:integer):Tdate;
var dd:integer;
begin
DD := MonthDay(yy,mm);
result := Encodedate( YY,mm, dd);
end;
{*****************************************
判断字符串是否为数字, 假设STR的前后没有空格
*****************************************
}
FUNCTION ISFLOAT(STR:STRING):BOOLEAN;
BEGIN
RESULT :=TRUE;
if Str= '' then Exit;
try
strtofloat(str);
except
on EConvertError do result := FALSE;
end;
END;
FUNCTION ISInt(STR:STRING):BOOLEAN;
BEGIN
RESULT :=TRUE;
if Str= '' then Exit;
try
strtoint(str);
except
on EConvertError do result := FALSE;
end;
END;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -