procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var i:integer; cHandle: THandle; sFrom:String; QryTmp:TADOQuery; loFormClass:TPersistentClass; begin inherited; try QryTmp:=TADOQuery.Create(nil); QryTmp.Connection:=cdm.adoCn; QryTmp.Close; QryTmp.SQL.Clear; QryTmp.SQL.Add(' SELECT DISTINCT SAE01 '+ ' FROM (SELECT SAE01 '+ ' FROM SYSAA '+ ' INNER JOIN SYSAF ON SYSAA.SAA01=SYSAF.SAF01 '+ ' INNER JOIN SYSAE ON SYSAF.SAF02=SYSAE.SAE02 '+ ' WHERE SAA01='+VarToSql(Trim(pUserCode))+' and SAE03=1 '+ ' UNION ALL '+ ' SELECT SAG03 AS SAE01 '+ ' FROM SYSAA '+ ' INNER JOIN SYSAG ON SYSAA.SAA01=SYSAG.SAG01 '+ ' WHERE SAA01='+VarToSql(Trim(pUserCode))+' and SAG04=1 ) AS AA '+ ' INNER JOIN SYSAC ON SYSAC.SAC01=AA.SAE01 '+ ' WHERE SAC07 NOT IN (''S'') '); QryTmp.Open; if QryTmp.RecordCount >0 Then begin QryTmp.First; While not QryTmp.Eof do begin sFrom:='Tfrm'+Trim(QryTmp.FieldByName('SAE01').AsString); cHandle:=FindWindow(pChar(sFrom),nil); if cHandle>0 Then begin Application.MessageBox('请关闭所有窗体!','信息窗口',MB_IconInformation+MB_OK); Abort; end; QryTmp.Next; end; end; finally QryTmp.Close; QryTmp.Free; end;
if not iscSocketClose then if application.Messagebox('是否真的要退出本系统?','提示信息',Mb_YesNo+Mb_IconQuestion)=IDNO then begin canClose:=False; Exit; end; for i:=0 to MainPageC.PageCount-1 do begin pFormHandle := 0; if MainPageC.ActivePage.Hint<>'' then pFormHandle:=Strtoint(MainPageC.ActivePage.Hint); SendDataToDll(pFormHandle,'Close'); end; if Assigned(Cdm) then begin if cSocket.Socket.Connected then cSocket.Socket.Sendtext('Disconnect'+pClientName); cSocket.Close; Cdm.adoCn.Close; Cdm.Free; end; Application.Terminate; end;
var
i:integer;
cHandle: THandle;
sFrom:String;
QryTmp:TADOQuery;
loFormClass:TPersistentClass;
begin
inherited;
try
QryTmp:=TADOQuery.Create(nil);
QryTmp.Connection:=cdm.adoCn;
QryTmp.Close;
QryTmp.SQL.Clear;
QryTmp.SQL.Add(' SELECT DISTINCT SAE01 '+
' FROM (SELECT SAE01 '+
' FROM SYSAA '+
' INNER JOIN SYSAF ON SYSAA.SAA01=SYSAF.SAF01 '+
' INNER JOIN SYSAE ON SYSAF.SAF02=SYSAE.SAE02 '+
' WHERE SAA01='+VarToSql(Trim(pUserCode))+' and SAE03=1 '+
' UNION ALL '+
' SELECT SAG03 AS SAE01 '+
' FROM SYSAA '+
' INNER JOIN SYSAG ON SYSAA.SAA01=SYSAG.SAG01 '+
' WHERE SAA01='+VarToSql(Trim(pUserCode))+' and SAG04=1 ) AS AA '+
' INNER JOIN SYSAC ON SYSAC.SAC01=AA.SAE01 '+
' WHERE SAC07 NOT IN (''S'') ');
QryTmp.Open;
if QryTmp.RecordCount >0 Then
begin
QryTmp.First;
While not QryTmp.Eof do
begin
sFrom:='Tfrm'+Trim(QryTmp.FieldByName('SAE01').AsString);
cHandle:=FindWindow(pChar(sFrom),nil);
if cHandle>0 Then
begin
Application.MessageBox('请关闭所有窗体!','信息窗口',MB_IconInformation+MB_OK);
Abort;
end;
QryTmp.Next;
end;
end;
finally
QryTmp.Close;
QryTmp.Free;
end;
if not iscSocketClose then
if application.Messagebox('是否真的要退出本系统?','提示信息',Mb_YesNo+Mb_IconQuestion)=IDNO then
begin
canClose:=False;
Exit;
end;
for i:=0 to MainPageC.PageCount-1 do
begin
pFormHandle := 0;
if MainPageC.ActivePage.Hint<>'' then
pFormHandle:=Strtoint(MainPageC.ActivePage.Hint);
SendDataToDll(pFormHandle,'Close');
end;
if Assigned(Cdm) then
begin
if cSocket.Socket.Connected then
cSocket.Socket.Sendtext('Disconnect'+pClientName);
cSocket.Close;
Cdm.adoCn.Close;
Cdm.Free;
end;
Application.Terminate;
end;