Problema:Falha Catastrofica, campo TFMTBCD vs. ClientDataSet

Delphi

29/07/2006

Estou efetuando esta simples instrução:

Select sum(Valor) from tabContas where id_conta = 100


O campo na tabela esta como numeric(12,2), quando incluo o field sem efetuar a soma ele aparece como [b:a31b6f25fe]TCBDField[/b:a31b6f25fe], agora quando incluo vindo da intrução de soma aparece como [b:a31b6f25fe]TFMTBCDField[/b:a31b6f25fe].

Alguem sabe me dizer o que ocorre?

Seria estouro da capacidade? Se bem que a soma nao ultrapassa 15.000,00.


Esta tabela foi migrada de uma base dbase, onde o campo era N(14,2).

Grato.




:roll:


Macario

Macario

Curtidas 0

Respostas

Raserafim

Raserafim

29/07/2006

tenta nomear o campo na instrução SQL assim:
Select sum(Valor) as ValorSoma from tabContas 
where id_conta = 100



GOSTEI 0
Macario

Macario

29/07/2006

Ola.

No post foi apenas um exemplo.


a simples instrução é esta:


select sum(isNull(MValor,0)+isNull(Desconto,0)) as Valorbaixa from Contas
where ID_Conta = 100


Na conexão do TSQLConnection, tentei passando Enable BCD, tanto como true como false, mas ocorre o mesmo.


grato.


GOSTEI 0
Marco Salles

Marco Salles

29/07/2006

Amigo , sem muita pretenção , mas so uma pergunta :

Sum(isNull(MValor,0))


seu banco suporta esta Instrução..

Quando voce faz simplesmente a soma igual o raserafim postou , da tb este erro ????


GOSTEI 0
Macario

Macario

29/07/2006

Esqueci de mencionar, estou usando Delphi 6 com MSSQL 2000, driver da CoreLab.

Sim numa simples instrução, como a que postei (sem indicar um alias ao campo), ou a que o colega raserafim postou, ocorre o erro.

Lembrando que so ocorre quando utilizo agregação.
:arrow:


GOSTEI 0
Macario

Macario

29/07/2006

Olá.

O problema foi solucionado.

Eu estava usando:
SQLConnection+SQLDataSet+DataSetProvider+ClientDataSet+DataSource

Pelo que pesquisei, alguem pode me corrigir, nativamente o dbExpress não suporta campos numericos com mais de 15 digitos.

Estou usando o driver da CoreLab (www.crlab.com) versao 2.50.6, quando instalado este driver adiciona na paleta dbexpress um componente TCRSQLConnection, no qual eu deveria estar usando, e nao apenas a ddl.

Agora estou usando este componente e tenho acesso a campos numeric ou decimal normalmente.



Grato pela atenção de todos.


GOSTEI 0
Bon Jovi

Bon Jovi

29/07/2006

Tenta usando cast no resultado da soma:

select cast(sum(isNull(MValor,0)+isNull(Desconto,0)) as numeric(15,2)) as Valorbaixa 
from Contas
where ID_Conta = 100 


Se não der certo, vê se com o driver da Borland funciona. Se ainda não, parte pra ADO, é mais recomendável.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

29/07/2006

Colega,

Com firebird/ibx já tive o mesmo problema e resolvi com Cast, mas como você está usando SQL Server, acho que o mais apropriado seria:

select Convert( Numeric(15,2), sum(isNull(MValor,0)+isNull(Desconto,0))) as Valorbaixa 
from Contas 
where ID_Conta = 100 



GOSTEI 0
Macario

Macario

29/07/2006

O problema do inicio deste post foi solucionado (campos numeric),

mas ja o da agregação não consegui.


Com a conversão do tipo (sobre o proprio tipo) funciona, mas gostaria de achar a forma [b:fda0a7d993]correta[/b:fda0a7d993] de [b:fda0a7d993]sanar[/b:fda0a7d993] este problema. Creio que seje algum bug: ou do [b:fda0a7d993]dbexpress[/b:fda0a7d993] ou do driver da [b:fda0a7d993]CoreLab[/b:fda0a7d993].



Info: Delphi 6, MSSQL 2000 e driver CoreLab 2.50.05


GOSTEI 0
POSTAR