Fórum Problema:Falha Catastrofica, campo TFMTBCD vs. ClientDataSet #326445

29/07/2006

0

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

Responder

Posts

29/07/2006

Raserafim

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



Responder

Gostei + 0

29/07/2006

Macario

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.


Responder

Gostei + 0

29/07/2006

Marco Salles

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


Responder

Gostei + 0

29/07/2006

Macario

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:


Responder

Gostei + 0

29/07/2006

Macario

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.


Responder

Gostei + 0

30/07/2006

Bon Jovi

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.


Responder

Gostei + 0

30/07/2006

Aroldo Zanela

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 



Responder

Gostei + 0

31/08/2006

Macario

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


Responder

Gostei + 0

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

Aceitar