Fórum Formatar Valor, Utilizando o Oracle 10 - Delphi 2007 #370959

03/06/2009

0

Boa tarde Pessoal,

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

Marlonnardi

Responder

Posts

04/06/2009

Woinch

Como é a definição desse campo no banco de dados?


Responder

Gostei + 0

04/06/2009

Marlonnardi

Number(17,2)


Responder

Gostei + 0

04/06/2009

Marlonnardi

Woinch,

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


Responder

Gostei + 0

04/06/2009

Woinch

Se o campo está definido como numérico como você mencionou, e você está aplicando a mascara como mencionado teria de funcionar... talvez possa ser algum problema nas suas configurações regionais (painel de controle).
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?


Responder

Gostei + 0

04/06/2009

Marlonnardi

Woinch,

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.


Responder

Gostei + 0

04/06/2009

Woinch

Você tem certeza que o FieldType é 1 para números? 1 é String... deve ser pelo cast que você esta fazendo (TO_CHAR...), experimente tira-lo e retornar o campo da maneira que ele esta no banco... E não faz sentido retornar 37 (FMTBcd) para Datas. Esse sim faria sentido se fosse para os números. Já que você está criando os campos direto no DataSet, ajuste as propriedades DataType dos mesmos corretamente, caso você tenha dúvida qual é a correta coloque como ftUnknown que ao efetuar o Open essa propriedade é ajustada automaticamente.

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.


Responder

Gostei + 0

04/06/2009

Marlonnardi

Woinch,

nao tem como eu mostrar o print da tela aqui pelo forum? ou anexar as imagens para que eu possa te mostrar?


Responder

Gostei + 0

04/06/2009

Marlonnardi

Woinch,

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.


Responder

Gostei + 0

04/06/2009

Woinch

Se você colocou o código que lhe passei no evento AfterOpen não pode aparecer assim. Favor verificar se você não está alterando a propriedade DisplayFormat para o campo que deseja em outro lugar. Verifique também na propriedade Params do seu SQLConnection se a variável ´Decimal Separator´ está com o valor ´.´. Caso contrário você terá de alterar a máscara ou se não experimente colocar o valor ´.´.
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! =/


Responder

Gostei + 0

05/06/2009

Marlonnardi

Woinch,

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


Responder

Gostei + 0

05/06/2009

Woinch

Fiz uns testes simples aqui e ao abrir os valores ficam xxxx,xx sem formatação nenhuma e xxxx.xxx,xx com a formatação que lhe passei. Você experimentou coloca-la em seu fonte? De qualquer forma é muito estranho aparecer os valores sem vírgula, pois os mesmos estao definidos corretamente no banco. Experimente apagar todos os campos do DataSet e dar um Open fazendo com que o Delphi crie automático todos os campos necessários.


Responder

Gostei + 0

05/06/2009

Marlonnardi

Sim, eu coloquei no meu Fonte a formatação que voce me passou, mesmo assim nao deu certo ficou da forma que eu tinha comentado antes.

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.


Responder

Gostei + 0

05/06/2009

Danielrsanches

só uma idéia:

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


Responder

Gostei + 0

05/06/2009

Marlonnardi

Valeu pela ajuda danielrsanches,

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


Responder

Gostei + 0

05/06/2009

Woinch

Fiz o teste em Oracle conexão via dbExpress. Componentes SQLConnection, SQLDataSet, DataSetProvider e ClientDataSet.
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.


Responder

Gostei + 0

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

Aceitar