Fórum Condição para fazer contas com ClientDataSet #347260

12/10/2007

0

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

Responder

Posts

12/10/2007

Jpauloss

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

então

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


Responder

Gostei + 0

12/10/2007

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 



Responder

Gostei + 0

12/10/2007

Jpauloss

[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?


Responder

Gostei + 0

12/10/2007

Marco Salles

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...


Responder

Gostei + 0

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

Aceitar