Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Idea

Sql em tempo de execução

Recommended Posts

Galera primeiro gostaria de agradecer ao pessoal do forúm pois estou apreendendo muito aqui, programando me surgiu uma dúvida estou fazendo uma consulta no banco firebird em tempo de execução para que ele me retorne o valor somado de uma coluna com algumas condições, quando não existe o registro com essas condições ele não executa e dá erro vou colocar o código abaixo.

 

//Vendas Balcao em Dinheiro

DmFecharCaixa.CdsConsSecundaria.Close;

DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as total from vendas where Especie = :Pespecie');

DmFecharCaixa.CdsConsSecundaria.Params.ParamByName('Pespecie').AsString := 'Dinheiro';

DmFecharCaixa.CdsConsSecundaria.Open;

EdtDinheiro.Value := DmFecharCaixa.CdsConsSecundaria.FieldByName('total').Value;

 

Esse código está localizado em onactive de um form para que ao abrir ele já apareça as informações, mas com o erro ele nem abre o form o erro segue logo abaixo.

Project Pcaixa.Exe raised exception class EvariantTypeCastError with message

'Could not convert variant of type(null) into type(Double)'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei onde está o erro, mas corrija isto:

DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as total from vendas where Especie = :Pespecie');

para

DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as total from vendas where Especie = Dinheiro');

É comum os parametros de sql não funcionarem porque esquecemos de ajustar algumas coisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei onde está o erro, mas corrija isto:

DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as total from vendas where Especie = :Pespecie');

para

DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as total from vendas where Especie = Dinheiro');

É comum os parametros de sql não funcionarem porque esquecemos de ajustar algumas coisa

 

Consegui resolver, mandei verificar antes se existe o registro com aquelas condições no banco If sim ai sim ele executa SUM se não nem faz nada o código ficou assim

DmFecharCaixa.CdsConsSecundaria.Close;
 DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select * from vendas where Especie = :PDinheiro');
 DmFecharCaixa.CdsConsSecundaria.Params.ParamByName('PDinheiro').AsString := 'DINHEIRO';
 DmFecharCaixa.CdsConsSecundaria.Open;
 If DmFecharCaixa.CdsConsSecundaria.RecordCount > 0 then
   Begin
   DmFecharCaixa.CdsConsSecundaria.Close;
   DmFecharCaixa.CdsConsSecundaria.CommandText := ('Select Sum(total)as totDin from vendas where Especie = :PDinheiro');
   DmFecharCaixa.CdsConsSecundaria.Params.ParamByName('PDinheiro').AsString := 'DINHEIRO';
   DmFecharCaixa.CdsConsSecundaria.Open;
   EdtDinheiro.Value := DmFecharCaixa.CdsConsSecundaria.FieldByName('totDin').Value;
   end;

 

Como deve perceber eu não consegui utilizar a dica do nosso caro amigo bdexterholland acima, pois não sei porque motivo quando coloco da forma por ele indicada o mesmo dá erro dizendo que não encontrou a tabela dinheiro.

Mas valeu mesmo galera pela força.

 

PS: Não sei como colocar resolvido no título do tópico!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, você não conseguiu porque - a nível de query - Dinheiro foi usado como um identificador e não como uma string como deveria ser, para resolver, bastaria usar a palavra Dinheiro entre aspas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega só para complementar o tópico, você pode melhorar um pouco a soma;

 

'Select Sum(coalesce(total, 0) as totDin from vendas where Especie = :PDinheiro');

 

Caso o campo seja null a soma retorna null, então use o coalesce que substitui o null pelo valor '0';

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.