Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Währung in Stringfeld sortieren (https://www.delphipraxis.net/88428-waehrung-stringfeld-sortieren.html)

winnionkel 15. Mär 2007 08:52

Datenbank: Access • Version: 7 • Zugriff über: ADO

Währung in Stringfeld sortieren
 
Hallo,

ich habe folgendes Problem:

Ich habe in einem Stringfield Geldbeträge gespeichert.
Wenn ich diese nun sortieren möchte, stimmt die Sortierreihenfolge nicht.

Beispiel:

14,59
2,96
21,93
3,98

Wieso das so ist, ist mir klar, da es ein Stringfield ist.
Ich muß das aber so machen, da in dem Feld auch stehen kann: 'Auf Anfrage', oder ähnliches.

Frage:
Wie muß mein ORDER BY Statemnet aussehen ? ( ADO auf Access )

Gruß
Winni

mkinzler 15. Mär 2007 09:05

Re: Währung in Stringfeld sortieren
 
SQL-Code:
...order by cast(feld as numeric(15,2)) ...
Du solltest aber vorher die Textbeschreibungen ausblenden

shmia 15. Mär 2007 09:08

Re: Währung in Stringfeld sortieren
 
Zitat:

Zitat von winnionkel
Ich habe in einem Stringfield Geldbeträge gespeichert.
Wenn ich diese nun sortieren möchte, stimmt die Sortierreihenfolge nicht.

Wieso das so ist, ist mir klar, da es ein Stringfield ist.
Ich muß das aber so machen, da in dem Feld auch stehen kann: 'Auf Anfrage', oder ähnliches.

Es muss nicht unbedingt ein Stringfeld sein.

Alternative 1:
Du kannst auch ein Currency-Feld verwenden und ein spezielle Vereinbarung treffen:
-1.0 bedeutet "Auf Anfrage"
-2.0 bedeutet "nicht mehr lieferbar"
Im Event OnGetText des Felds wird in diesen Fällen die Zahl durch obigen Text ersetzt.
Die Benutzeroberfläche zeigt also etwas anderes an, als in dem Feld steht.
Alternative 2:
Du kannst auch ein zusätzliches Feld (z.B. ArtikelStatus) einführen.
Dieses Feld gibt an, ob der Geldbetrag gültig ist oder ob ein anderer Status gilt ("Auf Anfrage").
Das ist die sauberste Lösung, da man so den ArtikelStatus abfragen kann und z.B. über die Where-Bedingung einen Filter setzen kann.

winnionkel 15. Mär 2007 09:15

Re: Währung in Stringfeld sortieren
 
Hallo,

ich lese die Preislisten aus CSV Dateien ein.
In dem Währungsfeld kann alles mögliche stehen.
Z. B. auch ein Punkt oder Komma in einem Satz, sodas ich beim einlesen schlecht feststellen kann, ob das nun ein Preis ider eine Bemerkung ist.

mkinzler 15. Mär 2007 09:37

Re: Währung in Stringfeld sortieren
 
Dann mußt du den Inhalt versuchen zu interpretieren. U.U. reicht ja Val()

yörsch 15. Mär 2007 09:48

Re: Währung in Stringfeld sortieren
 
Man nennt das natürliche Sortierung.

Siehe : Sortierung

shmia 15. Mär 2007 12:20

Re: Währung in Stringfeld sortieren
 
Zitat:

Zitat von winnionkel
ich lese die Preislisten aus CSV Dateien ein.
In dem Währungsfeld kann alles mögliche stehen.

Dann hat der Ersteller der CSV-Datei nicht an die Maschinenlesbarkeit gedacht
bzw ihm war nicht bewusst, dass ein Feld nur einen Datentyp und nur eine Bedeutung haben soll.
(Stichwort: 1. Normalform)

Ich würde das Feld in 2 Felder aufsplitten, (ein Cuurency und ein Stringfeld) und den Inhalt jeweils
in das passende Feld übernehmen.
Die Parameter code der Procedure Val() sagt dir, ob es eine gültige Zahl oder ein String ist.

winnionkel 15. Mär 2007 12:26

Re: Währung in Stringfeld sortieren
 
Das sind Preislisten von Internet - Shops.
Da hat jede Preisliste ein anderes Format.

Man weiß ja nicht, was die Programmierer sich gedacht haben,
als die den CSV Export gemacht haben :-D

Und mein Kunde möchte jetzt nun mal, das die Bemerkungen auch im Preisfeld angezeigt werden.

Aber mit VAL() ist schon mal ne gute Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz