Thread View: pl.comp.lang.delphi.bazy-danych
10 messages
10 total messages
Started by Bartek
Thu, 05 Jun 2014 16:59
DBText, postgres i dużo za dużo miejsc po przecinku
Author: Bartek
Date: Thu, 05 Jun 2014 16:59
Date: Thu, 05 Jun 2014 16:59
28 lines
2149 bytes
2149 bytes
Witam Podpowiedzcie proszę jak pozbyć się takiego dziwactwa. Mam bazę na postgresie, pole typu real. W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. Liczbę tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z bazy i umieścić w komponencie DBText. I faktycznie początek jest taki sam jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku niż to co mam w bazie. Całość robię tak Wpisuję liczbę do edita, np. 12,34 Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko kropkę. W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34, czyli wg mnie ok. Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w bazie, np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku jest za każdym razem inna, i różna dla każdej liczby. Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, tak jak w bazie? Pozdrawiam Bartek
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: Bartek
Date: Thu, 05 Jun 2014 17:03
Date: Thu, 05 Jun 2014 17:03
48 lines
3000 bytes
3000 bytes
Dodam tylko że wstawiam to do DBText w ten sposób: Ulista_samochody.Form_lista.ZQuery_lista.Connection := Zconnection_baza; Ulista_samochody.Form_lista.ZQuery_lista.Active; Ulista_samochody.Form_lista.ZQuery_lista.Close; Ulista_samochody.Form_lista.ZQuery_lista.Open; Ulista_samochody.Form_lista.DataSource_lista.DataSet := Ulista_samochody.Form_lista.ZQuery_lista; Ulista_samochody.Form_lista.DBGrid1.DataSource := Ulista_samochody.Form_lista.DataSource_lista; Ulista_samochody.Form_lista.DBText1.DataSource := Ulista_samochody.Form_lista.DataSource_lista; Ulista_samochody.Form_lista.DBText1.DataField := 'cena'; Użytkownik "Bartek" napisał w wiadomości grup dyskusyjnych:lmq7l7$49a$1@news.task.gda.pl... Witam Podpowiedzcie proszę jak pozbyć się takiego dziwactwa. Mam bazę na postgresie, pole typu real. W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. Liczbę tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z bazy i umieścić w komponencie DBText. I faktycznie początek jest taki sam jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku niż to co mam w bazie. Całość robię tak Wpisuję liczbę do edita, np. 12,34 Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko kropkę. W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34, czyli wg mnie ok. Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w bazie, np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku jest za każdym razem inna, i różna dla każdej liczby. Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, tak jak w bazie? Pozdrawiam Bartek
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 17:54
Date: Thu, 05 Jun 2014 17:54
10 lines
1322 bytes
1322 bytes
Dnia Thu, 5 Jun 2014 18:59:16 +0200, Bartek napisał(a): > Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, > tak jak w bazie? http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/ -- pozdro R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: miab
Date: Thu, 05 Jun 2014 18:00
Date: Thu, 05 Jun 2014 18:00
29 lines
2462 bytes
2462 bytes
W dniu 2014-06-05 18:59, Bartek pisze: > Witam > Podpowiedzcie proszę jak pozbyć się takiego dziwactwa. > Mam bazę na postgresie, pole typu real. > > W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. > Liczbę tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją > odczytać z bazy i umieścić w komponencie DBText. I faktycznie początek > jest taki sam jak w bazie ale potem pojawia się jeszcze dużo więcej > miejsc po przecinku niż to co mam w bazie. > > Całość robię tak > Wpisuję liczbę do edita, np. 12,34 > Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka > tylko kropkę. > W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34, > czyli wg mnie ok. > Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast > 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma > znacznie więcej miejsc po przecinku niż liczba którą wprowadziłem która > jest w bazie, np. zamiast 12.34 mam 12.347380896632, przy czym ilość > miejsc po przecinku jest za każdym razem inna, i różna dla każdej liczby. > Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po > przecinku, tak jak w bazie? Np. tak ',0.00' albo tak '#.##' Poczytaj o DisplayFormat. miab
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 18:05
Date: Thu, 05 Jun 2014 18:05
9 lines
1396 bytes
1396 bytes
Dnia Thu, 5 Jun 2014 19:54:38 +0200, R.e.m.e.K napisał(a): > http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/ http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html -- pozdro R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: wloochacz
Date: Thu, 05 Jun 2014 18:20
Date: Thu, 05 Jun 2014 18:20
74 lines
4217 bytes
4217 bytes
W dniu 2014-06-05 19:03, Bartek pisze: > Dodam tylko że wstawiam to do DBText w ten sposób: > Ulista_samochody.Form_lista.ZQuery_lista.Connection := Zconnection_baza; > Ulista_samochody.Form_lista.ZQuery_lista.Active; Co to jest i po co?? > Ulista_samochody.Form_lista.ZQuery_lista.Close; > Ulista_samochody.Form_lista.ZQuery_lista.Open; A dlaczego tak? Rozumiem, że samo open nie starczywszy? Oczywiście, że wystarczy... > > Ulista_samochody.Form_lista.DataSource_lista.DataSet := > Ulista_samochody.Form_lista.ZQuery_lista; > Ulista_samochody.Form_lista.DBGrid1.DataSource := > Ulista_samochody.Form_lista.DataSource_lista; > > > Ulista_samochody.Form_lista.DBText1.DataSource := > Ulista_samochody.Form_lista.DataSource_lista; > Ulista_samochody.Form_lista.DBText1.DataField := 'cena'; WTF? > Użytkownik "Bartek" napisał w wiadomości grup > dyskusyjnych:lmq7l7$49a$1@news.task.gda.pl... > > Witam > Podpowiedzcie proszę jak pozbyć się takiego dziwactwa. > Mam bazę na postgresie, pole typu real. Dziwactwem jest używanie typów zmiennoprzecinkowych do przetrzymywania danych, które takimi nie są. Wiesz, że KAŻDA baza danych posiada typu stałoprzecinkowe? Deklaruje się je tak: numeric(19,4) Inni używają numeric(15,2), ale osobiście uważam to za mały błąd. > W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. Dlaczego nie TDBEdit? > Liczbę > tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z > bazy i umieścić w komponencie DBText. Umieścić? Samo się tam umieści - wystarczy podpiąć DataSource i wybrać pole. > I faktycznie początek jest taki sam > jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku > niż to co mam w bazie. OK, to poczytaj co Ci REMEK napisał (aczkolwiek ten art jest po łebkach pisany - chyba jakiś chłopak od PHP go zmajstrował ;-)) > Całość robię tak > Wpisuję liczbę do edita, np. 12,34 > Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko > kropkę. > W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34, > czyli wg mnie ok. Nie jest OK. > Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast Co zrobić? Wstawić? A jak ją wstawiasz do DBText? > 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie > więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w > bazie, > np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku > jest za każdym razem inna, i różna dla każdej liczby. > Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, > tak jak w bazie? Po pierwsze - zmienić typ w bazie danych, najlepiej na taki, który odpowiadał by TCurrencyField w Delphi - czyli numeric(19,4). Po drugie przeczytać ten wpis na blogu i zawsze stosować się do rady miaba. -- wloochacz
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: wloochacz
Date: Thu, 05 Jun 2014 18:25
Date: Thu, 05 Jun 2014 18:25
19 lines
2081 bytes
2081 bytes
W dniu 2014-06-05 20:05, R.e.m.e.K pisze: > Dnia Thu, 5 Jun 2014 19:54:38 +0200, R.e.m.e.K napisał(a): > >> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/ > > http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html Ale to nie na temat jest... tam pisza o MySQL :D Poza tym, stać Cię na znalezienie lepszego artykułu ;-) W żadnym z nich nie wspomniano o reprezentacji liczb zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu: "SQL zaokrągla zapisane liczby do bardzo zbliżonych."... A wystarczy Wikipedia: http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla niektórych... -- wloochacz
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 20:40
Date: Thu, 05 Jun 2014 20:40
27 lines
2243 bytes
2243 bytes
Dnia Thu, 05 Jun 2014 20:25:53 +0200, wloochacz napisał(a): >>> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/ >> >> http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html > Ale to nie na temat jest... tam pisza o MySQL :D No tak, MySQL jest tu wyjatkiem :-P > Poza tym, stać Cię na znalezienie lepszego artykułu ;-) Szukalem ...odpowiedniego, ten na wiki tez chcialem dac, ale... > W żadnym z nich nie wspomniano o reprezentacji liczb > zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu: > "SQL zaokrągla zapisane liczby do bardzo zbliżonych."... > > A wystarczy Wikipedia: > http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa > Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla > niektórych... ...ano wlasnie ;-) -- pozdro R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: Bartek
Date: Sun, 08 Jun 2014 14:42
Date: Sun, 08 Jun 2014 14:42
49 lines
2739 bytes
2739 bytes
Witam Dziękuje wszystkim za podpowiedź, zrobiłem tak jak radziliście i tak jak w tych opisach. I pomogło - teraz działa tak jak powinno. A przy okazji da się zrobić coś takiego żeby przy wyświetlaniu wartości w polu DBText można było dodać jeszcze np. zł Z labelem to nie ma problemu bo Label.Caption := jakas_zmienna + 'zł'; No a jak to zrobić z DBText-em? Dane do niego ładuje tak DBText11.DataSource := DataSource_lista_k; DBText11.DataField := 'paliwo_cena'; Użytkownik "R.e.m.e.K" napisał w wiadomości grup dyskusyjnych:5390d5a5$0$2236$65785112@news.neostrada.pl... Dnia Thu, 05 Jun 2014 20:25:53 +0200, wloochacz napisał(a): >>> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/ >> >> http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html > Ale to nie na temat jest... tam pisza o MySQL :D No tak, MySQL jest tu wyjatkiem :-P > Poza tym, stać Cię na znalezienie lepszego artykułu ;-) Szukalem ...odpowiedniego, ten na wiki tez chcialem dac, ale... > W żadnym z nich nie wspomniano o reprezentacji liczb > zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu: > "SQL zaokrągla zapisane liczby do bardzo zbliżonych."... > > A wystarczy Wikipedia: > http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa > Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla > niektórych... ...ano wlasnie ;-) -- pozdro R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
Author: wloochacz
Date: Sun, 08 Jun 2014 15:29
Date: Sun, 08 Jun 2014 15:29
24 lines
2163 bytes
2163 bytes
W dniu 2014-06-08 16:42, Bartek pisze:
> Witam
>
> Dziękuje wszystkim za podpowiedź, zrobiłem tak jak radziliście i tak jak
> w tych opisach.
> I pomogło - teraz działa tak jak powinno.
>
> A przy okazji da się zrobić coś takiego żeby przy wyświetlaniu wartości
> w polu DBText można było dodać jeszcze np. zł
> Z labelem to nie ma problemu bo Label.Caption := jakas_zmienna + 'zł';
>
> No a jak to zrobić z DBText-em?
>
> Dane do niego ładuje tak
>
> DBText11.DataSource := DataSource_lista_k;
> DBText11.DataField := 'paliwo_cena';
Da się, wpisz to sobie np w zdarzeniu AfterOpen DataSet'a:
DataSet.FieldByName('paliwo_cena') as TNumericField).DisplayFormat :=
',0.00 zł';
--
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