Fórum Contar elementos de um Array #18193

05/03/2010

0

Bom dia!

Help,


                  Em um sistema soap, retorna para mim um array com 4 elementos, acontece
                     que nem sempre volta os quatro elementos do array,
                  e quando eu faço um insert em uma ClientDataSet e um dos array não vem ele me causa um erro de excessão. 
 
               Exemplo:
        pega o primento elemento...
      
        if ( RespDC.dadosContrato.contratos[i].parcelas[0].nossoNumero <> 0 )   then
            begin
      CdsContratos.FieldByName('NossoNumpc1').AsString:= InttoStr(RespDC.dadosContrato.contratos[i].parcelas[0].nossoNumero);
      CdsContratos.FieldByName('DTVCp1').AsString :=DateToStr(RespDC.dadosContrato.contratos[i].parcelas[0].dataVencimento.asDate);
      CdsContratos.FieldByName('VLPC1').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[0].valorOrigem.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
      CdsContratos.FieldByName('VLPC1Atual').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[0].valorAtualizado.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
            end;

         pega o segundo, que não  existe... ai causa a excessão...

        if ( RespDC.dadosContrato.contratos[i].parcelas[1].nossoNumero <> 0 )   then
            begin
      CdsContratos.FieldByName('NossoNumpc2').AsString:= InttoStr(RespDC.dadosContrato.contratos[i].parcelas[1].nossoNumero);
      CdsContratos.FieldByName('DTVCp2').AsString :=DateToStr(RespDC.dadosContrato.contratos[i].parcelas[1].dataVencimento.asDate);
      CdsContratos.FieldByName('VLPC2').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[1].valorOrigem.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
      CdsContratos.FieldByName('VLPC2Atual').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[1].valorAtualizado.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
             end;

        Pergunta: 

           Esse array tem 5 campos, e pode tem até quatro elementos.

          1 -  Como faço para contar quantos elementos tem esse array?
          2 -  Como faço para saber se um desses campos que compoem o array esta vázio?


  Obrigado.

Henrique

   
















Henrique Rocha

Henrique Rocha

Responder

Posts

05/03/2010

Rodrigo Mourão

Não faca com IF,  faca com LOOP



for J := Low(RespDC.dadosContrato.contratos[i].parcelas) to
              high(RespDC.dadosContrato.contratos[i].parcelas) do
begin
    CdsContratos.FieldByName('NossoNumpc1').AsString:= InttoStr(RespDC.dadosContrato.contratos[i].parcelas[J].nossoNumero);
      CdsContratos.FieldByName('DTVCp1').AsString :=DateToStr(RespDC.dadosContrato.contratos[i].parcelas[J].dataVencimento.asDate);
      CdsContratos.FieldByName('VLPC1').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[J].valorOrigem.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
      CdsContratos.FieldByName('VLPC1Atual').AsFloat  :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[J].valorAtualizado.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
end;


Assim se tiver 1 parcela ele faz uma vez se tiver 1000 percelas ele 1000 vezes.


Att,
Responder

Gostei + 0

05/03/2010

Henrique Rocha

OK, funcionou.

Obrigado.

Pode encerrar o chamado.

até logo.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar