SQLite und Beträge?
SQLite und Beträge?
Hallo zusammen,
ich Bastel mir grade eine kleine Warenwirtschaft zusammen.
Nun bin ich an den punkt das ich bei den Artikeln preise hinterlegen will.
nun welchen Datentyp nimmt man dafür in SQLite eigentlich?
Viele Grüße
Alex
ich Bastel mir grade eine kleine Warenwirtschaft zusammen.
Nun bin ich an den punkt das ich bei den Artikeln preise hinterlegen will.
nun welchen Datentyp nimmt man dafür in SQLite eigentlich?
Viele Grüße
Alex
Re: SQLite und Beträge?
Willkommen im Lazarusforum!
Wenn du SQLDB (Package mit Lazarus geliefert) verwendest, kannst du Currency als Datentyp nehmen. Nimmst du dann ein TDBEdit, werden nur Zahlen und Dezimaltrenner als Eingabemaske zugelassen.
Zeos speichert Currency als undefined Varchar und du musst selber prüfen, ob Eingaben einem Preis entsprechen (z.B. dem User einen Hinweis ausgeben, dass der Preis ein falsches Format hat).
PS: Bitte keine Mehrfachposts http://www.lazarusforum.de/viewtopic.php?f=18&t=9622 zum gleichen Thema. Es meldet sich schon jemand, auch wenn es manchmal etwas dauert.
Wenn du SQLDB (Package mit Lazarus geliefert) verwendest, kannst du Currency als Datentyp nehmen. Nimmst du dann ein TDBEdit, werden nur Zahlen und Dezimaltrenner als Eingabemaske zugelassen.
Zeos speichert Currency als undefined Varchar und du musst selber prüfen, ob Eingaben einem Preis entsprechen (z.B. dem User einen Hinweis ausgeben, dass der Preis ein falsches Format hat).
PS: Bitte keine Mehrfachposts http://www.lazarusforum.de/viewtopic.php?f=18&t=9622 zum gleichen Thema. Es meldet sich schon jemand, auch wenn es manchmal etwas dauert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: SQLite und Beträge?
@Michl
Da SQLite keinen Currency Typen kennt, leg ich Currency values als Double ab. Beim lesen sollten das Feld mit 'MONEY' enden -> SQLite affinities (e.g. SMALLMONEY etc)
Nur so am Rande..
Kann ich so nicht stehen lassen... War das mal so?Michl hat geschrieben:Zeos speichert Currency als undefined Varchar und du musst selber prüfen, ob Eingaben einem Preis entsprechen (z.B. dem User einen Hinweis ausgeben, dass der Preis ein falsches Format hat).
Code: Alles auswählen
....
stFloat, stDouble, stCurrency, stBigDecimal:
FErrorcode := FPlainDriver.bind_double(FStmtHandle, i,
ClientVarManager.GetAsFloat(InParamValues[i-1]));
....
Nur so am Rande..
ZeosDevTeam
Re: SQLite und Beträge?
Ich hatte gestern nur einen kurzen Test gemacht und nicht in den Code geschaut. Zugegeben, ich muss ZEOS auf den neusten Stand bringen (was ich eben machen wollte aber irgendwie ist der SVN-Server gerade nicht erreichbar), in meiner genutzen Version (SVN testing-7.2) ist Currency aber auch schon als Double definiert.EgonHugeist hat geschrieben:@Michl
Kann ich so nicht stehen lassen... War das mal so?Michl hat geschrieben:Zeos speichert Currency als undefined Varchar und du musst selber prüfen, ob Eingaben einem Preis entsprechen (z.B. dem User einen Hinweis ausgeben, dass der Preis ein falsches Format hat).Da SQLite keinen Currency Typen kennt, leg ich Currency values als Double ab. Beim lesen sollten das Feld mit 'MONEY' enden -> SQLite affinities (e.g. SMALLMONEY etc)Code: Alles auswählen
.... stFloat, stDouble, stCurrency, stBigDecimal: FErrorcode := FPlainDriver.bind_double(FStmtHandle, i, ClientVarManager.GetAsFloat(InParamValues[i-1])); ....
Nur so am Rande..
Allerdings wird in einem TDBGrid das Currency Datenfeld erst mit ZConnection.Properties-Zusatz "Undefined_Varchar_AsString_Length=255" angezeigt und es können problemlos sonstige Zeichen "abc.." eingegeben und gespeichert werden. D.h. es legt genau das Verhalten, wie ein undefined Varchar an den Tag. Daher meine obige Falschaussage.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: SQLite und Beträge?
ich habe das nun mit Decimal(10,2) gemacht
geht wunderbar
geht wunderbar

-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: SQLite und Beträge?
Hallo,
ich frage mal hier, denn ich habe das Problem mit Postgres.
In Postgresql ein Feld mit numeric(20,2) definiert.
Im DBGrid und auf einem Formular in einem TCurrencyEdit werden einfache Tausender-Zahlen mit Tausender-Trennzeichen angezeigt.
1 Mio wird nur als 100 und 10 Tsd nur als 1 angezeigt.
Was mache ich denn da schon wieder falsch?
Schönen Abend
Volker
ich frage mal hier, denn ich habe das Problem mit Postgres.
In Postgresql ein Feld mit numeric(20,2) definiert.
Im DBGrid und auf einem Formular in einem TCurrencyEdit werden einfache Tausender-Zahlen mit Tausender-Trennzeichen angezeigt.
1 Mio wird nur als 100 und 10 Tsd nur als 1 angezeigt.
Was mache ich denn da schon wieder falsch?
Schönen Abend
Volker
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: SQLite und Beträge?
Die Antwort auf meine Frage:
Den Datentyp "numeric" nicht verwenden. Besser "double precision" oder "money". Wobei ich ganz am Anfang meines Gebastel (Postgres 14 oder was ich da am Start hatte) mit "money" meine liebe Not hatte. Siehe hier: viewtopic.php?f=17&t=7936&p=134771&hili ... ey#p134771
Jetzt bin ich wieder bei money und es funktioniert (PG15, Lazarus Trunk 3.99 auf Manjaro und Win 11). Double geht auch.
Sicherer ist vermutlich double. Ich schau einfach was passiert und wie sich das entwickelt.
Schönen Abend
Volker
Den Datentyp "numeric" nicht verwenden. Besser "double precision" oder "money". Wobei ich ganz am Anfang meines Gebastel (Postgres 14 oder was ich da am Start hatte) mit "money" meine liebe Not hatte. Siehe hier: viewtopic.php?f=17&t=7936&p=134771&hili ... ey#p134771
Jetzt bin ich wieder bei money und es funktioniert (PG15, Lazarus Trunk 3.99 auf Manjaro und Win 11). Double geht auch.
Sicherer ist vermutlich double. Ich schau einfach was passiert und wie sich das entwickelt.
Schönen Abend
Volker