Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Darstellung einer Zahl im DBGrid (https://www.delphipraxis.net/167385-darstellung-einer-zahl-im-dbgrid.html)

khh 27. Mär 2012 13:25

Darstellung einer Zahl im DBGrid
 
hallo zusammen,
ich habe eine EAN13 in einem DB-Feld vom Typ char().
Funktioniert soweit wunderbar.
Die Daten werden im DBGrid ordentlich dargestellt.
Allerdings werden diese EANs auch alphanummerisch sortiert.
Mein Versuch die Nummern numerisch zu sortieren scheitert bisher :-(
Ich habe im SQl-Statement ein
Code:
cast(f.artnr as float) as artnr
eingefügt,da ich der Meinung war der Wertebereich ist so ausreichend.
Formatiert wird die GRID-Ausgabe mit '############0'
Leider wird so aus einer gültigen EAN "4008400401027"
die formatierte Zahl 4008400388096 :-(
Hat hier jemand ne Erklärung?

hhcm 27. Mär 2012 14:32

AW: Darstellung einer Zahl im DBGrid
 
Welche DB Engine verwendest du denn? SQL ist ziemlich vielfältig ;)

Abgesehen davon, wie kann denn eine EAN falsch sortiert werden? Selbst wenn es nicht numerisch ist?

khh 27. Mär 2012 14:39

AW: Darstellung einer Zahl im DBGrid
 
Zitat:

Zitat von hhcm (Beitrag 1158907)
Welche DB Engine verwendest du denn? SQL ist ziemlich vielfältig ;)

Abgesehen davon, wie kann denn eine EAN falsch sortiert werden? Selbst wenn es nicht numerisch ist?

sorry,
firebird 2.1 zugriff über ZEOS

naja, ist eben ein Unterschied ob numerisch oder alphanumerisch sortiert wird.
EDIT:
ibexpert kommt zum gleichen Ergebnis,
aus einer gültigen EAN "4008400401027" wird
4008400388096

DeddyH 27. Mär 2012 14:42

AW: Darstellung einer Zahl im DBGrid
 
Aber doch nur bei unterschiedlicher Stringlänge, oder täusche ich mich gerade?

[edit] Wie ist es denn ohne Cast und stattdessen mit LPAD?
SQL-Code:
LPAD(artnr, 20) as artnr
[/edit]

khh 27. Mär 2012 14:47

AW: Darstellung einer Zahl im DBGrid
 
Zitat:

Zitat von DeddyH (Beitrag 1158912)
Aber doch nur bei unterschiedlicher Stringlänge, oder täusche ich mich gerade?

was meinst du mit unterschiedlicher stringlänge ?

DeddyH 27. Mär 2012 14:49

AW: Darstellung einer Zahl im DBGrid
 
Damit meine ich, dass 123 nummerisch bewertet größer ist als 42, alphanumerisch aber nicht. Hast Du mein Edit oben gesehen?

hhcm 27. Mär 2012 14:51

AW: Darstellung einer Zahl im DBGrid
 
Also er sagt EAN13 = 13 Ziffern. Ich verstehe gerade nicht warum das fehlerhaft sortiert werden sollte?

shmia 27. Mär 2012 14:52

AW: Darstellung einer Zahl im DBGrid
 
Wie wäre es damit:
SQL-Code:
SELECT RightString('0000000000000'+ArtNr, 13) AS SortFeld, * FROM EanTabelle
ORDER BY 1
Für die Funktion RightString() muss im Firebird 2.1 Dialekt die passende Funktion nachgeschlagen werden.
ORDER BY 1 bedeutet es wird nach dem 1. Feld sortiert.
Eventuell muss zusätzlich noch die RTrim()-Funktion verwendet werden, weil ein Char(13)-Feld wahrscheinlich anhängende Leerzeichen haben kann
SQL-Code:
SELECT RightString('0000000000000'+RTrim(ArtNr), 13) AS SortFeld, * FROM EanTabelle
ORDER BY 1

DeddyH 27. Mär 2012 14:54

AW: Darstellung einer Zahl im DBGrid
 
Dürfte das nicht mein LPAD von oben sein?

khh 27. Mär 2012 14:54

AW: Darstellung einer Zahl im DBGrid
 
Zitat:

Zitat von DeddyH (Beitrag 1158915)
Damit meine ich, dass 123 nummerisch bewertet größer ist als 42, alphanumerisch aber nicht. Hast Du mein Edit oben gesehen?

ja, so ist es, und so gefällt es den meisten Kunden nicht.

LPAD funktioniert, ich danke dir.

Kannst du mir das vieleicht noch erklären?

Muss mich korrigieren,
die Sortierung ist mit LPAD auch alphanumerisch, kann ich mir also sparen :-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr.
Seite 1 von 3  1 23      

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