🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
4 messages
4 total messages Started by Bartek Thu, 29 Jan 2015 13:59
DBText i ilość miejsc po przecinku
#82454
Author: Bartek
Date: Thu, 29 Jan 2015 13:59
17 lines
1453 bytes
Witam
Podpowiedzcie czy można i jak to zrobić żeby dane wyświetlane na formularzu 
np. tak 12E-5, tylko tak 0,00012.
Można to jakoś zrobić?
W bazie (postgres) mam je zapisane w polu numeric (10,8) i chciałbym je 
wyświetlić właśnie tak 0,00012.
Albo żeby przy zmianie jednostki przecinek mi się przesuwał np.0,00012 potem 
0,12 potem 12 itd.

Jedyne co mi przyszło do głowy to zamianę tego na stringa i zapisanie w 
bazie jako stringa, ale chyba to nie tędy droga.

Można to jakoś formatować na wzór tego:
FloatToStrf(zmienna,ffFixed, 100,8);

Pozdrawiam
Bartek
Re: DBText i ilość miejsc po przecinku
#82455
Author: wloochacz
Date: Thu, 29 Jan 2015 14:40
38 lines
2301 bytes
W dniu 2015-01-29 o 14:59, Bartek pisze:
> Witam
> Podpowiedzcie czy można i jak to zrobić żeby dane wyświetlane na
> formularzu np. tak 12E-5, tylko tak 0,00012.
> Można to jakoś zrobić?
Próbowałeś ustawić DisplayFormat i EditFormat dla pola?
Czyli:
  (PostgreSQLQuery.FieldByName('Pole') as TNumericField).DisplayFormat 
:= ',0.00######';
I ten kod wstawić w zdarzeniu AfterOpen PostgreSQLQuery.
No chyba, że masz pola dodane w edytorze pól DataSetu - to możesz tam to 
po prostu Wpisać.

> W bazie (postgres) mam je zapisane w polu numeric (10,8) i chciałbym je
> wyświetlić właśnie tak 0,00012.
Jaki masz typ pola (TField) w Delphi? Chodzi mi o nazwe klasy tego pola.

> Albo żeby przy zmianie jednostki przecinek mi się przesuwał np.0,00012
> potem 0,12 potem 12 itd.
>
> Jedyne co mi przyszło do głowy to zamianę tego na stringa i zapisanie w
> bazie jako stringa,
Z takimi pomysłami to na 4programmers.pl zapraszam; tam to przejdzie. Tu 
- niekoniecznie ;-)

> ale chyba to nie tędy droga.
Zdecydowanie nie.

> Można to jakoś formatować na wzór tego:
> FloatToStrf(zmienna,ffFixed, 100,8);
Tak też się da, trzeba obsłużyć zdarzenie OnGetText dla tego pola:
będzie coś takiego:
begin
   Text := FloatToStrf(Sender.AsFloat, ffFixed, 100,8);
end;

-- 
wloochacz
Re: DBText i ilość miejsc po przecinku
#82456
Author: Bartek
Date: Thu, 29 Jan 2015 17:04
31 lines
2171 bytes
Witam

>Użytkownik "wloochacz"  napisał w wiadomości grup 
>dyskusyjnych:54ca465c$0$2642$65785112@news.neostrada.pl... Próbowałeś 
>ustawić DisplayFormat i EditFormat dla pola?
>Czyli:
  >(PostgreSQLQuery.FieldByName('Pole') as TNumericField).DisplayFormat
>:= ',0.00######';
> ten kod wstawić w zdarzeniu AfterOpen PostgreSQLQuery.
>No chyba, że masz pola dodane w edytorze pól DataSetu - to możesz tam to po 
>prostu Wpisać.

No i super, dzięki to rozwiązanie się sprawdziło

Zrobiłem tak

Ulista.Form_lista.DBText7.DataSource := Ulista.Form_lista.DataSource_lista;
Ulista.Form_lista.DBText7.DataField := 'wskaznik';
(Ulista.Form_lista.ZQuery_lista.FieldByName('wskaznik') as 
TNumericField).DisplayFormat:= ',0.00######';

I działa bez problemu, chociaż mam pytanie.
Co zrobić żeby zamiast kopek były przecinki, jak to zmiennie na 
',0,00######'; to nie działa, pokazują się same zera.

No i jeszcze jedno pytanie, jak do tego co wyświetla DBText dodać jednostkę 
np. [kw], lub [h] itd,
Normalnie zrobił bym tak Label1.Caption := zmienna + '[kw]';
No ale to nie działa w tym przypadku.
Pozdrawiam
Bartek
Re: DBText i ilość miejsc po przecinku
#82458
Author: wloochacz
Date: Thu, 29 Jan 2015 20:19
62 lines
3467 bytes
W dniu 2015-01-29 o 18:04, Bartek pisze:
> Witam
>
>> Użytkownik "wloochacz"  napisał w wiadomości grup
>> dyskusyjnych:54ca465c$0$2642$65785112@news.neostrada.pl... Próbowałeś
>> ustawić DisplayFormat i EditFormat dla pola?
>> Czyli:
>   >(PostgreSQLQuery.FieldByName('Pole') as TNumericField).DisplayFormat
>> := ',0.00######';
>> ten kod wstawić w zdarzeniu AfterOpen PostgreSQLQuery.
>> No chyba, że masz pola dodane w edytorze pól DataSetu - to możesz tam
>> to po prostu Wpisać.
>
> No i super, dzięki to rozwiązanie się sprawdziło
>
> Zrobiłem tak
>
> Ulista.Form_lista.DBText7.DataSource := Ulista.Form_lista.DataSource_lista;
> Ulista.Form_lista.DBText7.DataField := 'wskaznik';
> (Ulista.Form_lista.ZQuery_lista.FieldByName('wskaznik') as
> TNumericField).DisplayFormat:= ',0.00######';
>
> I działa bez problemu, chociaż mam pytanie.
> Co zrobić żeby zamiast kopek były przecinki, jak to zmiennie na
> ',0,00######'; to nie działa, pokazują się same zera.
Złośliwie to będzie, że kopki to mogą być siana...
Mniej złośliwie - RTFM!
Dla przedszkolaka - to (czyli ',0.00######') jest maska i nie ma nic 
wspólnego z wyświetlaniem kropek lub przecinka jako separatora części 
ułamkowej. Czy tam będzie kropka lub przecinek, zależy od ustawień 
regionalnych systemu - i tak ma być.

Ale doczytaj sobie o konstrukcji masek w manualu - co ja będę się 
powtarzał...
Tam jest jasno opisane, co oznacza przecinek, kropka,
0 i płotek...

> No i jeszcze jedno pytanie, jak do tego co wyświetla DBText dodać
> jednostkę np. [kw], lub [h] itd,
Tak samo - ustal odpowiednią maskę wyświetlania dla pola, w tym 
przypadku będzie to (na przykład) taka:
'0,00## [h]' - godzina zapisywana jako wartość metryczna? Straszna lipa 
i lenistwo - imho...
'0,00## [kW]' - a nie kw...

Jeśli to ma być pole edycyjne (np. TDBEdit), ustal odpowiednią maskę 
(TField.EditFormat) dla edycji - bo inaczej nie będzie dobrze dla 
użytkownika.

> Normalnie zrobił bym tak Label1.Caption := zmienna + '[kw]';
To nie jest normalnie. No chyba że wg standardów fachowców z 
4programmers ;-)
Normalnie to będzie za pomocą maski.
Mniej normalnie, za pomocą zdarzeń TField.OnSet/OnGetText (zasada będzie 
podobna jak przy labelu).

> No ale to nie działa w tym przypadku.
Co nie działa? Wszystko działa ;-)


-- 
wloochacz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads