Fórum Formatar Valor, Utilizando o Oracle 10 - Delphi 2007 #370959
03/06/2009
0
o ClientDataSet não esta aceitando a formatação que eu estou colocando para formatar o Valor que estou buscando.
No banco de Dados o Valor esta desta forma : 3066,36
E quando eu trago os valores para minha Dbgrid sem formatação, ela me aparece desta forma: 306636
quando eu coloco a formação na Coluna la no Meu ClientDataSet
esta formatando de uma forma estranha, minha formatação é:
#,0.00 so que quando eu formato desta forma na mina aplicação (Dbgrid) aparece desta forma: 306.636,00.
ou seja, esta formatando de uma forma errada, eu ja formatei este campo de varias formas: ,0, ,, .... etcc....
e nenhuma destas formas esta chegando nem perto do valor real, eu nao consegui formatar de uma forma que fique somente a virgula e dois campos (ex: ,36).
Alguem saberia me dizer se é alguma configuração na minha maquina ou no Dbgrid ou no meu ClientDataSet, ja pesquisei em varios lugares da net e a unica solução que eu vejo o pessoal falando que é pra colocar esta formatação ,0.00, mas desta forma nao esta dando certo.
Obs. estou utilizando o Delphi 2007 - Oracle 10g com SQLQUERY, DATASetProvider, ClientDataSet, DataSource e Dbgrid.
Valeu pela boa colaboração de Voces.
Marlonnardi
Curtir tópico
+ 0Posts
04/06/2009
Woinch
Gostei + 0
04/06/2009
Marlonnardi
Gostei + 0
04/06/2009
Marlonnardi
para quebrar o galho enquanto eu nao consigo fazer da forma correta, estou fazendo o seguinte:
select a.empresa,
f.den_empresa,
c.pedido,
g.seq_item_nf,
c.ord_montag,
a.nota_fiscal,
a.serie_nota_fiscal,
a.sit_nota_fiscal,
a.usu_incl_nf,
a.dat_hor_emissao,
c.natureza_operacao,
g.cod_fiscal,
a.cliente,
b.nom_cliente,
c.item,
e.den_item,
to_char(c.qtd_item,´99999999d999999´) as qtd_item,
c.unid_medida,
to_char(c.peso_unit,´99999999d999999´) as peso_unit,
to_char(c.preco_unit_liquido,´99999999d999999´) as preco_unit_liquido,
--c.pre_unit_ped
to_char(c.val_liquido_item,´9999999d99´) as val_liquido_item,
--e.val_desc_cred_icm
a.val_frete_rodov,
a.val_seguro_rodov,
--e.val_tot_ipi
--a.val_tot_icm
to_char(a.val_mercadoria,´99999999d99´) as val_mercadoria,
to_char(g.bc_trib_mercadoria,´99999999d99´) as bc_trib_mercadoria,
to_char(a.val_nota_fiscal,´9999999d99´) as val_nota_fiscal,
to_char(c.val_contab_item,´99999999d99´) as val_contab_item,
to_char(g.val_trib_merc,´999999d99´) as icms,
a.moeda,
a.cond_pagto,
d.den_cnd_pgto,
to_char(a.peso_liquido,´99999999d99999´) as peso_liquido,
to_char(a.peso_bruto,´99999999d99999´) as peso_bruto,
a.transportadora,
a.placa_veiculo,
h.num_conhec
from fat_nf_mestre a ,
clientes b,
fat_nf_item c,
cond_pgto d,
item e,
empresa f,
fat_nf_item_fisc g,
frete_sup_x_nff h
where f.cod_empresa = a.empresa
and a.cliente = b.cod_cliente
and a.empresa = c.empresa
and a.trans_nota_fiscal = c.trans_nota_fiscal
and a.empresa = e.cod_empresa
and c.item = e.cod_item
and a.cond_pagto = d.cod_cnd_pgto
and a.empresa = g.empresa
and a.trans_nota_fiscal = g.trans_nota_fiscal
and e.cod_empresa = c.empresa
and c.empresa = g.empresa
and c.trans_nota_fiscal = g.trans_nota_fiscal
and c.seq_item_nf = g.seq_item_nf
and trunc(a.dat_hor_emissao) = trunc(sysdate)
and a.empresa = h.cod_empresa (+)
and a.nota_fiscal = h.num_nff (+)
and a.transportadora = h.cod_transpor (+)
and g.tributo_benef = ´ICMS´
estou formatando o campo ´to_char(a.val_nota_fiscal,´9999999d99´) as val_nota_fiscal,´ no proprio SQL para que apareca na Dbgrid corretamente, mas isso nao é o correto.
se eu fazer desta forma eu nao consigo fazer muitas coisas, como fazer aggregates nos campos que eu quero calcular, nos meus relatorios eu nao consigo fazer as somas, (Utilizo o Fortes Report),e nas somas dos campos ele da erro, por logicamente ele nao entendo os valores como CHAR...
etcc..
se algum puder me ajudar, posso mandar a estrutura da tabela para verificar o tipo da mesma e meu codigo fonte do programa de consulta.
abrcss
Gostei + 0
04/06/2009
Woinch
Você está utilizando os componentes vinculados da maneira a seguir?
DBGrid
|- DataSource
|- ClientDataSet
|- DataSetProvider
|- SQLDataSet
Você já inseriu as colunas direto no ClientDataSet ou deixa que o próprio Delphi faça isso ao efetuar o Open? Consegue identificar qual o tipo que está vindo nessa coluna? Como você efetuou a aplicação da máscara?
Gostei + 0
04/06/2009
Marlonnardi
ano sei seo problema pode ser na configuração regioanal da minha maquina,
em relação ao componentes estou usando da segunte forma:
DBGrid
|- DataSource
|- ClientDataSet
|- DataSetProvider
|- SQLQuery
Em relação ao ClientDataSet eu inseri todas as colunas nele, e o Tipo de dado que retorna na minha aplicação e´do tipo DATATYPE = 1 para os numeros e DATATYPE 37 para as datas.
a configuração de mascara estou fazendo no proprio SQL passando os valores para char e formatando.
EX: to_char(a.val_nota_fiscal,´9999999d99´) as val_nota_fiscal,
nao estou utilizando nenhum tipo de formatação no proprio Delphi.
Gostei + 0
04/06/2009
Woinch
Para efetuar a formatação coloque o seguinte no evento AfterOpen do ClientDataSet:
(DataSet.FieldByName(´NOME_DO_CAMPO´) as TNumericField).DisplayFormat := ´#,0.00´;
Aguardo seu retorno.
Gostei + 0
04/06/2009
Marlonnardi
nao tem como eu mostrar o print da tela aqui pelo forum? ou anexar as imagens para que eu possa te mostrar?
Gostei + 0
04/06/2009
Marlonnardi
da forma que voce me explicou eu fiz aqui:
no banco de dados o campo valor da NOTA FISCAL é: 25365,33
na minha aplicação apos feita a alteração mencionada ela fica assim:2.536.533,00.
seria a mesma coisa que eu setava a opção de currency para este valor, e desta forma nao me traz o valor correto.
Gostei + 0
04/06/2009
Woinch
Existe uma outra opção em relação aos campos BCD, mas agora não me lembro... Dê uma pesquisada aqui no fórum que isso já foi mencionado aqui.
Caso nenhuma dessas opções não funcionar, infelizmente não consigo mais lhe ajudar! =/
Gostei + 0
05/06/2009
Marlonnardi
Obrigado pela sua colaboração, mas nao deu certo...
No Decimal Separator do SqlConnection estava como ´,´, alterei para ´.´, mas mesmo assim nao funcionou.
em relação a colocar esta propredade em outro lugar isto eu nao fiz, nao sei oque pode ser.
nao sei onde que eu tenho que alterar mais, eu ja refiz todo meu form para ver se eu nao tinha feita alguma alteração que eu nao estava mais lembrando, no banco de dados (Oracle 10g) esta la os valores bunitinhos todos formatados da forma correta ex: 25843,67 - 216871,38 - 22476,00 e na minha aplicação (DBGRID) apos formatado fica desta forma:21.687.138,00 - 2.584.637,00 - 22.476,00...
esses valores que estao mencionados por ultimo é do meu novo formulario que eu refiz.
Woinch, por acaso voce nao saberia me dizer onde ficam as configurações de numeros do Oracle, nao sei mas onde recorrer...
ja fiz tambem em outra maquina meu projeto, para evitar que fosse alguma configuração na minha maquina, todos os campos do banco de dados onde os campos sao numeros esta desta forma, ex: number(17,2), number (8,2), etcc...
se eu colocar o sql puro(sem nehuma formatação no sql) no meu SQLQUERY, quando apresento os dados na minha DBGRID aparecem desta forma ex: 2584367 - 21687138 - 22476.
Woinch, se voce souber alguem que conhece Delphi assim como voce tenta verificar com esta pessoa se ela ja nao passou por isso, ou se voce souber alguem que trabalhe com delphi e que utilize o Oracle, pergunte a ele como que ele faz os tratamentos de numeros e valores.
Abrcss...
Gostei + 0
05/06/2009
Woinch
Gostei + 0
05/06/2009
Marlonnardi
Pois entao, nas minhas aplicações onde eu uso o Firebird e possui virgula, aparecem normalmente as virgulas no Dbgrid, agora aqui na minha aplicação que eu estou usando o banco de dados Oracle isso nao ocorre.
que banco de dados que voce fez os testes ai? se for o firebird aqui tambem funciona normalmente, o problema esta, que eu estou utilizando o banco de dados Oracle.
qual é o componente de conexao que voce esta utilizando ai?
abrcss.
Gostei + 0
05/06/2009
Danielrsanches
os dados que estão no banco ORACLE foram importados do FIREBIRD ou foram digitados ??? se foram importados, não ocorre a possibilidade da importação de valores ter sido feita erroneamente ?? talvez esteja mostrando 999,99 porém o valor está incorreto... talvez se tentar alterar o valor digitando-o novamente...
foi só uma idéia... se os fatos acima mencionados não ocorreram, favor descartar !! rsrsrs
abraços !!
Gostei + 0
05/06/2009
Marlonnardi
os dados nao foram importados do Firebird, sao banco de dados distinto com informações distintas, so informei o Firebird por que existem informações do tipo Number(17,2) no Firebird igual ao Oracle, so que na minha aplicação que estou usando Oracle, os valores nao vem separados por virgulas ou formatados, como vem quando eu utilizo o banco de dados Firebird.
Obs. a aplicação que eu utilizo o Firebird é um sistema que eu desenvolvi para minha Lan House, funciona perfeitamente.
E a aplicação que eu utilizo o Oracle e aqui no meu serviço, que é um sistema de relatorios do Faturamento.
Abrcss..
Gostei + 0
05/06/2009
Woinch
Bom, se você mencionou que a sua aplicação em Firebird funciona perfeitamente, provavelmente você deve ter utilizado as mesmas maneiras de conexão e execução dos Selects.
Experimente fazer um teste criando uma nova tabela nessa sua base com somente um campo do tipo NUMBER(17,2) como mencionado. Insira alguns registros e faça um programa separado para ver se está trazendo direito. Faça esse mesmo teste utilizando o mesmo programa mas acessando uma base Firebird. Tire a partir dai suas próprias conclusoes.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)