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