📄 hzunit.pas
字号:
unit HZUnit;
interface
uses
Classes, Windows, SysUtils, Dialogs, ADODB ;
type
WaitPas3 = class(TThread)
Filename : String; //往线程中注入备份或还原的文件名
Messages : String; //显示信息
IDs1 : Integer; //识别应该执行什么样的操作
ADOQ : TADOQuery;
//备份文件
function BackUpData:Boolean;
//还原文件
function RevertData:Boolean;
//关闭等待窗口
procedure CloseWaitWindow;
//更新等待窗口信息
procedure PostMessgesToWaitWindow;
private
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(LoadID:integer);
end;
implementation
uses wait,DBM;
{ WaitPas }
function WaitPas3.BackUpData:Boolean;
var
BeAudit_h,
AfAudit_h,
AfAuditPay_h,
Payed_h,
BePayed_h,
ThisYear_h,
Remain_h,
benyue_h,
ConNumber_h:string;
fill:string;
begin
Messages:='正在进行财务汇总,请稍候……';
Synchronize(PostMessgesToWaitWindow);
with DM do try
BeAudit_h:='';
AfAudit_h:='';
AfAuditPay_h:='';
Payed_h:='0';
BePayed_h:='0';
ThisYear_h:='0';
Remain_h:='0';
benyue_h:='0';
fill:='';
//WaitForm.ShowModal;
//with DM do
// begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ConNumber from contract');
ADOQuery1.Open; //打开合同表
while not ADOQuery1.Eof do
begin
BeAudit_h:='';
AfAudit_h:='';
AfAuditPay_h:='';
Payed_h:='0';
BePayed_h:='0';
ThisYear_h:='0';
Remain_h:='0';
fill:='';
connumber_h:=ADOQuery1.FieldValues['ConNumber'];//合同号
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select daifang,remain from detail where ConNumber='''+connumber_h+''' order by id');
ADOQuery_h.Open;
if ADOQuery_h.RecordCount=0 then
begin
gengxin_h.Close;
gengxin_h.SQL.Clear;
gengxin_h.SQL.Add('update contract set AfAudit='''+AfAudit_h+''',BeAudit='''+BeAudit_h+''',AfAuditPay='''+AfAuditPay_h+''',Payed='''+Payed_h+''',BePayed='''+BePayed_h+''',ThisYear='''+ThisYear_h+''',Remain='''+Remain_h+''',Fulfill='''+fill+''',benyue='''+benyue_h+''' where connumber='''+ConNumber_h+'''') ;
gengxin_h.ExecSQL; //更新合同表为空
ADOQuery1.Next;
continue;
end;
ADOQuery_h.Last;
remain_h:=ADOQuery_h.FieldValues['remain']; //余额
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select sum(daifang) as daisum2 from detail where marking=1 and ConNumber='''+connumber_h+'''');
ADOQuery_h.Open;
// ADOQuery_h.First;
BeAudit_h:=ADOQuery_h.FieldValues['daisum2']; //审计前金额
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select jiefang from detail where marking=0 and ConNumber='''+connumber_h+''' and addDate<'''+formatdatetime('yyyy',now)+'''');
ADOQuery_h.Open;
if ADOQuery_h.RecordCount>0 then begin
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select sum(jiefang) as jiefang_h from detail where marking=0 and ConNumber='''+connumber_h+''' and addDate<'''+formatdatetime('yyyy',now)+'''');
ADOQuery_h.Open;
BePayed_h:=ADOQuery_h.FieldValues['jiefang_h'];//以前年度已付款
end else
BePayed_h:='0';//以前年度已付款
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select jiefang from detail where marking=0 and ConNumber='''+connumber_h+''' and addDate>='''+formatdatetime('yyyy-MM-01',now)+'''');
ADOQuery_h.Open;
if ADOQuery_h.RecordCount>0 then begin
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select sum(jiefang) as jiefang_h from detail where marking=0 and ConNumber='''+connumber_h+''' and addDate>='''+formatdatetime('yyyy-MM-01',now)+'''');
ADOQuery_h.Open;
Benyue_h:=ADOQuery_h.FieldValues['jiefang_h'];//本月付款
end else
Benyue_h:='0';//本月付款
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select jiefang from detail where ConNumber='''+connumber_h+''' and marking=0');
ADOQuery_h.Open;
if ADOQuery_h.RecordCount>0 then begin
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select sum(jiefang) as jiefang_h from detail where ConNumber='''+connumber_h+''' and marking=0' );
ADOQuery_h.Open;
Payed_h:=ADOQuery_h.FieldValues['jiefang_h'];//已付款小计
end else
Payed_h:='0';//已付款小计
//ThisYear_h:=floattostr(strtofloat(Payed_h)-strtofloat(BePayed_h));//本年度已付款
ThisYear_h:=Format('%8.2f',[strtofloat(Payed_h)-strtofloat(BePayed_h)]);
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select daifang from detail where marking=2 and ConNumber='''+connumber_h+'''');
ADOQuery_h.Open;
if ADOQuery_h.RecordCount>0 then begin
ADOQuery_h.Close;
ADOQuery_h.SQL.Clear;
ADOQuery_h.SQL.Add('select sum(daifang) as ssjjhh from detail where marking=2 and ConNumber='''+connumber_h+'''');
ADOQuery_h.Open;
AfAuditPay_h:=ADOQuery_h.FieldValues['ssjjhh'];//审计后价款
AfAudit_h:=BeAudit_h;//审计前给审计后
BeAudit_h:='';//审计前为空
fill:=copy(floattostr((strtofloat(Payed_h)/strtofloat(AfAuditPay_h))*100),0,4)+'%';//履行合同情况
end else begin
fill:=copy(floattostr((strtofloat(Payed_h)/strtofloat(BeAudit_h))*100),0,4)+'%';//履行合同情况
AfAuditPay_h:='';//如果没有审计后价款就为空
AfAudit_h:='';
end;
gengxin_h.Close;
gengxin_h.SQL.Clear;
gengxin_h.SQL.Add('update contract set AfAudit='''+AfAudit_h+''',BeAudit='''+BeAudit_h+''',AfAuditPay='''+AfAuditPay_h+''',Payed='''+Payed_h+''',BePayed='''+BePayed_h+''',ThisYear='''+ThisYear_h+''',Remain='''+Remain_h+''',Fulfill='''+fill+''',benyue='''+benyue_h+''' where connumber='''+ConNumber_h+'''') ;
gengxin_h.ExecSQL; //更新合同表
ADOQuery1.Next;
end;
//showmessage(' 更新成功!!!!');
if ADOQuery2.Active then begin
ADOQuery2.Close;
ADOQuery2.Open;
end;
// end;
Result:=true;
except
Result:=false;
end;
end;
procedure WaitPas3.CloseWaitWindow;
begin
WaitForm.Close;
end;
constructor WaitPas3.Create(LoadID:integer);
begin
//初始化进程
IDs1 := LoadID;
inherited Create(False);
end;
procedure WaitPas3.Execute;
var IsSucceed : Boolean;
begin
IsSucceed:=false;
case IDs1 of
1 : IsSucceed := BackUpData; //备份
2 : IsSucceed := RevertData; //还原
end;
Synchronize(CloseWaitWindow);
if IsSucceed then
Messagebox(0,'财务数据汇总操作成功!','提示',MB_OK+MB_ICONINFORMATION+MB_TOPMOST)
ELSE ShowMessage('操作失败!!');
{ Place thread code here }
end;
procedure WaitPas3.PostMessgesToWaitWindow;
begin
WaitForm.RzLabel1.Caption:=Messages;
end;
function WaitPas3.RevertData: Boolean;
begin
Messages:='正在还原数据库,请稍候……';
Synchronize(PostMessgesToWaitWindow);
with ADOQ do try
Close;
SQL.Clear;
sql.Add('use master');
sql.Add('ALTER DATABASE bargain SET OFFLINE WITH ROLLBACK IMMEDIATE');
sql.Add('RESTORE DATABASE bargain FROM DISK ='''+(FileName)+''' with FILE=1,RECOVERY,REPLACE');
sql.Add('ALTER DATABASE bargain SET ONLINE WITH ROLLBACK IMMEDIATE');
SQL.Add('Use bargain');
Prepared;
execsql;
Result:=true;
except
Result:=false;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -