Condição para fazer contas com ClientDataSet

Delphi

12/10/2007

Galera tô com um probleminha tenho esse código
     if not dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´ then begin

         While not dm.cdsCheques.eof do
          begin
           vSaldoReal  := vSaldoReal  + dm.cdsChequesVALOR.AsFloat;
           dm.cdsCheques.Next;
          end;

         While not dm.cdsPagamento.eof do
          begin
           vSaldoReal := vSaldoReal - (dm.cdsPagamentoPAGAMENTO.AsFloat)-(dm.cdsPagamentoPAGAMENTO_JUROS.AsFloat) + (dm.cdsPagamentoJUROS.AsFloat);
           dm.cdsPagamento.Next;
          end;

        saldo_real.Text:=FloatToStr(vSaldoReal);
   end;


Só que está dando um erro na linha:if not dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´ then begin
Erro:
[Error] UnPagamento.pas(120): Operator not applicable to this operand type


Aí que está minha dúvida, quero fazer um condição que se o campo estiver SIM então ele não vai entrar para fazer o calculo. Entenderam?
Não sei se fazendo por StoreProcedure fica melhor, se alguem tentar me ajudar ficarei grato.


Jpauloss

Jpauloss

Curtidas 0

Respostas

Jpauloss

Jpauloss

12/10/2007

Galera só consertando, se:
if not dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´

então

dm.cdsChequesVALOR.AsFloat --> não quero que entre para calculo.


GOSTEI 0
Marco Salles

Marco Salles

12/10/2007

Com voce esta trabalhando com ClientDataSet acho que um Simples Filtro
resolveria... Muito melhor do que esse If que voce esta fazendo..

Alem disso procure se informar sobre campos Agregados com ClientDataSet .....Voce pode usar o Sum(VALOR) etc e coisa e tal

Agora quanto ao erro é devido a falta do parentesis

if not (dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´) then begin 



GOSTEI 0
Jpauloss

Jpauloss

12/10/2007

[quote:f11d860b7b=´Marco Salles´]Com voce esta trabalhando com ClientDataSet acho que um Simples Filtro
resolveria... Muito melhor do que esse If que voce esta fazendo..

Alem disso procure se informar sobre campos Agregados com ClientDataSet .....Voce pode usar o Sum(VALOR) etc e coisa e tal

Agora quanto ao erro é devido a falta do parentesis

if not (dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´) then begin 
[/quote:f11d860b7b]

Fiz assim como você colocou mais num ta dando certo, então fiz assim:
     if not (dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´) then begin
            (dm.cdsChequesVALOR.AsString=´0´)


Resumindo se for SIM então o ClientDataSetVALOR seu valor vai ser zero.

Mas ta dando esse erro na linha
While not dm.cdsCheques.eof do

O erro
[Error] UnPagamento.pas(123): Missing operator or semicolon


Que faço?


GOSTEI 0
Marco Salles

Marco Salles

12/10/2007

Amigo , estamos perdendo o foco da discussão... :cry: :cry:

[color=red:22d895f132]1) parte[/color:22d895f132]
[u:22d895f132][b:22d895f132]Seu codigo inicialmente apresentado tem erro de Sintaxi e de Logica[/b:22d895f132][/u:22d895f132]

   if not dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´ then begin 

         While not dm.cdsCheques.eof do 
          begin 
           vSaldoReal  := vSaldoReal  + dm.cdsChequesVALOR.AsFloat; 
           dm.cdsCheques.Next; 
          end; 

         While not dm.cdsPagamento.eof do 
          begin 
           vSaldoReal := vSaldoReal - 
                                (dm.cdsPagamentoPAGAMENTO.AsFloat)-
                                (dm.cdsPagamentoPAGAMENTO_JUROS.AsFloat) + 
                                (dm.cdsPagamentoJUROS.AsFloat); 
           dm.cdsPagamento.Next; 
          end; 

        saldo_real.Text:=FloatToStr(vSaldoReal); 
   end;


[color=red:22d895f132]2) parte[/color:22d895f132]

Depois disso nesse ultimo tópico voce Apresentou algo que tb esta errado

if not (dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´) then begin [b:22d895f132](dm.cdsChequesVALOR.AsString=´0´)[/b:22d895f132]

Voce esta Atribuindo para um Campo o Valor ZERO , Sem dar um Edit na base de dados

[color=red:22d895f132]3) Parte[/color:22d895f132]

e finalmente voce disse que

Mas ta dando esse erro na linha Código: [b:22d895f132]While not dm.cdsCheques.eof do[/b:22d895f132]


[b:22d895f132]Que tem sua Sintaxi Totalmente Correta e portanto Não deve e não tem o Porque de dar nenhum tipo de ERRO[/b:22d895f132]

Bem o que é certo e voce deve insistir e usar filtro ao invez do Teste IF e usar campos Agreegados em vez do While eof do , quando se quer acumular o valor de algum campo.

saldo_real.Text:=FloatToStr(vSaldoReal);
end;[/code:1:22d895f132]

[color=red:22d895f132]2) parte[/color:22d895f132]

Depois disso nesse ultimo tópico voce Apresentou algo que tb esta errado

if not (dm.cdsChequesCHEQUE_PAGO.AsString=´SIM´) then begin [b:22d895f132](dm.cdsChequesVALOR.AsString=´0´)[/b:22d895f132]

Voce esta Atribuindo para um Campo o Valor ZERO , Sem dar um Edit na base de dados

[color=red:22d895f132]3) Parte[/color:22d895f132]

e finalmente voce disse que

Mas ta dando esse erro na linha Código: [b:22d895f132]While not dm.cdsCheques.eof do[/b:22d895f132]


[b:22d895f132]Que tem sua Sintaxi Totalmente Correta e portanto Não deve e não tem o Porque de dar nenhum tipo de ERRO[/b:22d895f132]

Bem o que é certo e voce deve insistir e usar filtro ao invez do Teste IF e usar campos Agreegados em vez do While eof do , quando se quer acumular o valor de algum campo.

Boa sorte...


GOSTEI 0
POSTAR