Toon posts:

[Delphi / MySQL] Currency opslaan in MySQL*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben al een tijdje bezig met het ontwikkelen van een programma dat gebruikt wordt voor verkoop/inkoop/voorraad etc. etc, hier komen dus veel bedragen in voor. Dit had ik gekoppeld aan Microsoft SQL Server 2000. Sinds een paar dagen heb ik de DB overgezet naar MySQL. Dit werkt verder allemaal prima, behalve 1 ding. En ik weet niet hoe ik dat op moet lossen:

De DBGrids zijn gekoppeld aan data waar bedragen in voorkomen. In Microsoft SQL gaf je een kolom als type "Money" als je daar dan een DBGrid aankoppelt kwamen in het grid netjes de €-tekens er bij te staan. In MySQL bestaat er geen type "Currency" dus heb ik het type "float" gebruikt. Dat werkt verder wel maar hoe krijg ik nu in de grids weer netjes de €-tekens te zien?


Ik weet niet of het relevant is maar ter info: De grids zijn als volgt gekoppeld aan MySQL:
DBGrid -> Datasource (BDE) -> Query (BDE) -> ODBC.

[ Voor 6% gewijzigd door Verwijderd op 30-07-2003 11:38 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Allereerst een vraagje:
waarom stap je over van SQL Server naar MySQL? Dat is hetzelfde als overstappen van een Bentley naar een Golf. MySQL is echt zeer beperkt tov databases ala SQL Server, Oracle. (Referentiele integriteit, Stored Procedures, Views, Triggers, ....)
Als het gaat om de kostprijs: er zijn nog andere gratis alternatieven die ook veel beter zijn dan MySQL.

Een float is waarschijnlijk geen goed data type om een bedrag in op te slaan, aangezien de precisie niet precies is. Je kan daar best een DECIMAL of NUMERIC data type voor gebruiken:
The NUMERIC and DECIMAL types are implemented as the same type by MySQL, as permitted by the SQL-92 standard. They are used for values for which it is important to preserve exact precision, for example with monetary data. When declaring a column of one of these types the precision and scale can be (and usually is) specified; for example:

salary DECIMAL(5,2)
In this example, 5 (precision) represents the number of significant decimal digits that will be stored for values, and 2 (scale) represents the number of digits that will be stored following the decimal point. In this case, therefore, the range of values that can be stored in the salary column is from -99.99 to 99.99. (MySQL can actually store numbers up to 999.99 in this column because it doesn't have to store the sign for positive numbers)
MySQL.com

[ Voor 58% gewijzigd door whoami op 30-07-2003 11:46 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Allereerst een vraagje:
waarom stap je over van SQL Server naar MySQL? Dat is hetzelfde als overstappen van een Bentley naar een Golf. MySQL is echt zeer beperkt tov databases ala SQL Server, Oracle. (Referentiele integriteit, Stored Procedures, Views, Triggers, ....)
Als het gaat om de kostprijs: er zijn nog andere gratis alternatieven die ook veel beter zijn dan MySQL.
Helemaal mee eens!
Voor de fun! :) het programma draait niet in een produktie omgeving. het is in ontwikkeling en ik hoop dat het uiteindelijk gebruikt kan worden. Aangezien ik geen MSSQL licentie heb ben ik over gestapt naar MySQL omdat dat inderdaad gratis is.

P.S. Noem eens betere freeware SQL servers? Altijd interessant! :)

[ Voor 30% gewijzigd door Verwijderd op 30-07-2003 11:56 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Verwijderd schreef op 30 juli 2003 @ 11:47:
[...]


Helemaal mee eens!
Voor de fun! :) het programma draait niet in een produktie omgeving. het is in ontwikkeling en ik hoop dat het uiteindelijk gebruikt kan worden. Aangezien ik geen MSSQL licentie heb ben ik over gestapt naar MySQL omdat dat inderdaad gratis is.

P.S. Noem eens betere freeware SQL servers? Altijd interessant! :)
MSDE is een 'gratis' versie van SQL Server. Alleen, je hebt daar geen Enterprise Manager bij (het is gewoon de engine), en het is maar geschikt voor 5 concurrent connecties.
Daarnaast heb je nog PostgreSQL, Interbase, ...

https://fgheysels.github.io/


Verwijderd

Topicstarter
MSDE is een 'gratis' versie van SQL Server
Sinds wanneer geeft microsoft iets gratis? er zit vast een addertje onder het gras! :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Verwijderd schreef op 30 juli 2003 @ 11:51:
[...]


Sinds wanneer geeft microsoft iets gratis? er zit vast een addertje onder het gras! :)
Ik geloof dat je het niet mag gebruiken voor commerciele doeleinden.

https://fgheysels.github.io/


Verwijderd

Topicstarter
The NUMERIC and DECIMAL types are implemented as the same type by MySQL, as permitted by the SQL-92 standard. They are used for values for which it is important to preserve exact precision, for example with monetary data. When declaring a column of one of these types the precision and scale can be (and usually is) specified; for example:

salary DECIMAL(5,2)
In this example, 5 (precision) represents the number of significant decimal digits that will be stored for values, and 2 (scale) represents the number of digits that will be stored following the decimal point. In this case, therefore, the range of values that can be stored in the salary column is from -99.99 to 99.99. (MySQL can actually store numbers up to 999.99 in this column because it doesn't have to store the sign for positive numbers)
Naar deze info had ik ook gezocht, maar ik denk dat de waarde dan gewoon als een afgerond getal gezien wordt toch? En dat dus nog steeds de €-tekens niet zichtbaar worden in de grids. Of vergis ik me nou?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Nee, je vergist je niet.
Echter, als je in Delphi rechts klikt op je Query component, en je klikt op 'Select All Fields' in de 'Fields editor', en dan geef je in de properties van de juiste velden aan dat het om een 'Money' of 'Currency' veld gaat, lukt het dan ook niet?

[ Voor 5% gewijzigd door whoami op 30-07-2003 12:02 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 30 July 2003 @ 12:01:
Nee, je vergist je niet.
Echter, als je in Delphi rechts klikt op je Query component, en je klikt op 'Select All Fields' in de 'Fields editor', en dan geef je in de properties van de juiste velden aan dat het om een 'Money' of 'Currency' veld gaat, lukt het dan ook niet?
Sjonge jonge jonge! |:( Sorry dat ik je lastig gevallen heb!
Je hebt inderdaad per kolom een property "Currency" die je op "TRUE" of "FALSE" kan zetten. getest en dat werkt inderdaad. THANKS... :)

(Die property had ik met MSSQL nooit nodig, dus daar had ik eerlijk gezegd nog niet eens naar gekeken.)

[ Voor 25% gewijzigd door Verwijderd op 30-07-2003 12:06 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Als je meer controle over de manier van weergeven van bepaalde velden wilt hebben kan je ook de TField.DisplayValue veranderen. Die kan je vinden op dezelfde manier of gewoon runtime zetten.

We adore chaos because we like to restore order - M.C. Escher


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 10:56

Delphi32

Heading for the gates of Eden

Verwijderd schreef op 30 July 2003 @ 11:51:
[...]

Sinds wanneer geeft microsoft iets gratis? er zit vast een addertje onder het gras! :)
En dat addertje bestaat in dit geval uit twee delen:
1. meer dan 5 connecties (correcter: workloads, dus queries) tegelijkertijd en hop, je performance daalt. In tests heb ik performance verliezen van 60-100% gemeten... In veel GUI based apps is dat echter maar een beperkt probleem.
2. Om de MSDE te mogen distribueren (ook voor commerciële doeleinden) moet je een licentie hebben van Visual Studio, een MSDN subscription hebben, of een Office XP developer edition. En dan nog zijn er tig regeltjes. Als Delphi-bouwer heb je meestal niet zo'n behoefte aan een VS-licentie :)
Pagina: 1