|
[ delalt @ 20.12.2005. 20:47 ] @
| Koristeći ClientDataSet, DataSource i DBGrid za prikaz podataka,
imam sledeći problem: ako se za polje tipa TFMTBCDField u ClientDataSetu
(koje se automatski dobije kao takvo učitavajući podatke iz baze gdje je
definisano kao NUMERIC(9,4) koristeći SQLQuery komponentu i 'SELECT * FROM ...')
postavi DisplayFormat npr. '#,##0.00' onda dobijeni prikaz u gridu
zavisi od konkretnog podatka:
0,25 izgleda kao ,25
20,00 izgleda kao 20
15,55 izgleda kao 15,55
23,45 izgleda kao 23,45
3,90 izgleda kao 3,90
4,00 izgleda kao 4
Ovo je u Delphiju 2005, a u Delphiju7 je malo bolje, dodaje nulu ispred zareza.
Znači, korektno radi prikaz samo ako postoji i cijeli i decimalni dio.
I ovo je uslovno, ako se prikazuje na drugi broj decimala onda je opet drugačije
(npr. za '#,##0.0' 3,95 prikaže kao 4 a kad se unese 4 okruglo
onda ga prikaže kao 4,0)...
Goglajući našao sam da je najvjerovatnije problem samo sa TFMTBCDField, dok se kod
tipa TFloatField ovo ne pojavljuje. Izgleda da ne zavisi ni od SQL servera,
ja koristim Firebird, a drugi su isti problem imali npr sa PostgreSQL, Oracle...
Čudno je što se godinama vuče taj problem u Delphiju???
Da..., koristim XP i probao sam mijenjati postavke za regionalna podešavanja,
regiju, tastaturu, DecimalSeparator, Customize, ali u principu je isto.
Kako vi to rješavate?
[Ovu poruku je menjao delalt dana 21.12.2005. u 22:52 GMT+1] |
[ marcha @ 21.12.2005. 05:16 ] @
Probah sa
DisplayFormat=#,0.00
[ delalt @ 21.12.2005. 21:55 ] @
Ne radi ni DisplayFormat := '#,0.00'
Nije problem u obliku kako je napisan DisplayFormat. Problem je izgleda greška
u FMTBcd unitu, pa uopšte ne prepoznaje dobro oblike za DisplayFormat kod ovog
tipa polja.
Na primjer funkcija:
FormatFloat('#,##0.00;(-#,##0.00);NULA', 1234.56) prikaže 1.234,56
FormatFloat('#,##0.00;(-#,##0.00);NULA', -1234.56) prikaže (-1.234,56)
FormatFloat('#,##0.00;(-#,##0.00);NULA', 0.0) prikaže NULA
kao što i treba, tj. prepoznaje format za pozitivnu, negativnu i nula vrijednost.
Kad se koristi DisplayFormat := '#,##0.00;(-#,##0.00);NULA'
onda to izgleda ovako:
1,234,560;(0000000);NULA
-1,234,560;(-0000000)
00000;(-00000);NULA
tj. ne prepoznaje i ne razdvaja posebno formate nego ih dodaje na onaj osnovni,
a izgleda da i taj osnovni ne koristi dobro.
Primjer
DisplayFormat := '#,##0.0' za 3.96 prikazuje 4 a trebalo bi 4,0
U svakom slučaju hvala na pomoći, bilo kakva ideja je dobrodošla :)
[ marcha @ 22.12.2005. 08:04 ] @
U pravu si. Ovo je Delphi BUG i jos uvek je otvoren.
http://qc.borland.com/wc/qcmain.aspx?d=2711
[ delalt @ 22.12.2005. 10:51 ] @
Izgleda da se to godinama vuče  i još nema nekog rješenja,
ili ja u osnovi nešto nisam postavio kako valja?
Postoji li nekakav zaobilazni način, onaj tip polja mi baš odgovara u bazi,
ne bih prelazio na float - ako baš ne moram.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|