//Desc: Ö´ÐвéѯÓï¾ä function TDBConnManager.WorkerQuery(const nWorker: PDBWorker; const nSQL: string): TDataSet; var nStep: Integer; nException: string; begin Result := nWorker.FQuery; nException := ''; nStep := 0; while nStep <= 2 do try if nStep = 1 then begin nWorker.FQuery.Close; nWorker.FQuery.SQL.Text := 'select 1'; nWorker.FQuery.Open; nWorker.FQuery.Close; Break; //connection is ok end else if nStep = 2 then begin nWorker.FConn.Close; nWorker.FConn.Open; end; //reconnnect nWorker.FQuery.Close; nWorker.FQuery.SQL.Text := nSQL; nWorker.FQuery.Open; nException := ''; Break; except on E:Exception do begin Inc(nStep); nException := E.Message; end; end; if nException <> '' then begin WriteLog('SQL: ' + nSQL + ' ::: ' + nException); raise Exception.Create(nException); end; end;