Idea 0 Denunciar post Postado Março 3, 2011 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
bdexterholland 0 Denunciar post Postado Março 3, 2011 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
Idea 0 Denunciar post Postado Março 4, 2011 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
bdexterholland 0 Denunciar post Postado Março 4, 2011 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
wllf 2 Denunciar post Postado Março 4, 2011 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