Re: [firebase-br] Consulta está derrubando o serviço
Suporte Sinapse Informática
suporte em sinapseinformatica.com.br
Qui Jan 25 20:19:52 -03 2007
Olá Ivan,
Segue abaixo o método que dá o erro. O erro ocorre extamente quando execute a instrução CdsSaldoVolanteAnt.Open. Detalhe o erro não ocorre quando a rotina está processando 3000º equipe. Como são 5570 não consegui terminar.
O cdsSaldoVolante executa o seguinte código SQL SELECT
A.REQUIPE as EQUIPE,
A.RCODMAT as CODMAT,
B.CLASSIFICACAO,
SUM(A.RTOTENT) as TOTENT,
SUM(A.RTOTSAI) as TOTSAI,
SUM(A.RTOTAPLIC) as TOTAPLIC,
SUM(A.RTOTREMOV) as TOTREMOV,
SUM(A.RSALDO) as SALDO FROM SP_EQUIPE_GASTO_APLICADO_DATA(:pTIPOSALDO,:pCODCT,:pPROJETO,:pEQUIPE,:pDATA_LIMITE,'-','-') A
Inner Join TB_MATERIAL B
On (B.CODMAT=A.rCODMAT)
Where (NOT A.RCODMAT Is Null and A.RCODMAT<>'')
GROUP BY A.REQUIPE,A.RCODMAT,B.CLASSIFICACAO,
Se não estiver dando para entender muito bem, eu posso te mandar o código fonte em PVT. O programa é pequeno. Não há problema nenhum em te mandar.
Eu agradeço pela atenção que estás me dando.
At.
Carlos Henrique Meireles
Rotina que dá o erro é esse aqui.
_________________________________________________________________________________________________________
procedure TDmMontaRelat.ProcessarSaldoVolanteAnt(CodCt, Projeto, Equipe, TipoSaldoAplic : String);
begin
If Empty(Projeto) Then
Projeto:='-';
FrmindicaProgresso.Stacao.Caption:='Calculando o saldo volante anterior do contrato: '+
Codct+' | Projeto: '+Projeto+' | Equipe: '+Equipe;
(*****************************************************************************)
CdsSaldoVolanteAnt.Close;
With QrySaldoVolanteAnt Do
Begin
ParamByName('pTIPOSALDO').AsString:=TipoSaldoAplic;
ParamByName('pCODCT').AsString:=Codct;
ParamByName('pPROJETO').AsString:=Projeto;
ParamByName('pEQUIPE').AsString:=Equipe;
ParamByName('pDATA_LIMITE').AsDate:=StrToDate('02/01/2007');
End;
CdsSaldoVolanteAnt.Open;// É essa linha que dá o erro.
(**************************************************************************)
Total_Registros:=CdsSaldoVolanteAnt.RecordCount;
Registro_Atual:=0;
(**************************************************************************)
While Not CdsSaldoVolanteAnt.Eof Do
Begin
If Not CdsSaldoVolante.Locate('CODCT;PROJETO;CODMAT',
VarArrayOf([Codct,Projeto,CdsSaldoVolanteAnt.FieldByName('CODMAT').AsString]),[]) Then
Begin
CdsSaldoVolante.Insert;
CdsSaldoVolanteCODCT.Value:=Codct;
CdsSaldoVolantePROJETO.Value:=Projeto;
CdsSaldoVolanteEQUIPE.Value:=Equipe;
CdsSaldoVolanteCODMAT.Value:=CdsSaldoVolanteAnt.FieldByName('CODMAT').AsString;
End
Else
CdsSaldoVolante.Edit;
CdsSaldoVolanteENT_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('TOTENT').AsFloat;
CdsSaldoVolanteSAI_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('TOTSAI').AsFloat;
CdsSaldoVolanteAPL_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('TOTAPLIC').AsFloat;
CdsSaldoVolanteREM_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('TOTREMOV').AsFloat;
If CdsSaldoVolanteAnt.FieldByName('CLASSIFICACAO').AsString<>'R' Then
CdsSaldoVolanteSALDO_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('SALDO').AsFloat
Else
CdsSaldoVolanteSALDO_VOL_ANT.Value:=CdsSaldoVolanteAnt.FieldByName('TOTREMOV').AsFloat-
CdsSaldoVolanteAnt.FieldByName('TOTSAI').AsFloat;
CdsSaldoVolante.Post;
CdsSaldoVolanteAnt.Next;
Inc(Registro_Atual);
End;
FrmindicaProgresso.Stacao.Caption:='Gravando o saldo volante anterior do contrato: '+
Codct+' | Projeto: '+Projeto+' | Equipe: '+Equipe+' | '+IntToStr(Registro_Atual)+' / '+IntToStr(Total_Registros);
FrmindicaProgresso.Update;
end;
Procedure
_________________________________________________________________________________________________________
CREATE PROCEDURE SP_EQUIPE_GASTO_APLICADO_DATA(
TIPOSALDO VARCHAR(10),
CODCT VARCHAR(4),
PROJETO VARCHAR(20),
EQUIPE VARCHAR(10),
DATA_LIMITE DATE,
CODMAT VARCHAR(12),
CODCPL VARCHAR(12))
RETURNS (
REQUIPE VARCHAR(10),
RCODMAT VARCHAR(12),
RCODCPL VARCHAR(12),
RTOTENT NUMERIC(9,2),
RTOTSAI NUMERIC(9,2),
RTOTAPLIC NUMERIC(9,2),
RTOTREMOV NUMERIC(9,2))
AS
begin
If (CODMAT='' or CODMAT='-') Then
Begin
CODMAT=Null;
End
If (CODCPL='' or CODCPL='-') Then
Begin
CODCPL=Null;
End
For Select EQUIPE, CODMAT, CODCPL, SUM(SAIDA) as TOTENT, SUM(ENTRADA) as TOTSAI From TB_ESTOQUE
Where CODCT=:CODCT and EQUIPE=:EQUIPE and DATA<=:DATA_LIMITE
Group By EQUIPE, CODMAT, CODCPL
Into :rEQUIPE, :rCODMAT, :rCODCPL, :rTOTENT, :rTOTSAI
Do
Begin
rTOTAPLIC=0;
rTOTREMOV=0;
Suspend;
End
For Select EQUIPE, CODMAT, CODCPL, SUM(QUANTIDADE) as TOTAPLIC, SUM(QUANT_REMOV) as TOTREMOV From TB_MATERIAL_TAREFA
Where CODCT=:CODCT and EQUIPE=:EQUIPE and DATA_APLIC<=:DATA_LIMITE
Group By EQUIPE, CODMAT, CODCPL
Into :rEQUIPE, :rCODMAT, :rCODCPL, :rTOTAPLIC, :rTOTREMOV
Do
Begin
rTOTENT=0;
rTOTSAI=0;
Suspend;
End
End
Mais detalhes sobre a lista de discussão lista