AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Abfrage formatiert ausgeben
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage formatiert ausgeben

Ein Thema von waldforest · begonnen am 9. Aug 2015 · letzter Beitrag vom 10. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

SQL-Abfrage formatiert ausgeben

  Alt 9. Aug 2015, 23:47
Datenbank: Firebird • Version: 2.5 • Zugriff über: zeos
Über eine Query - SQL-Abfrage ziehe ich mir Summen über meine Verkäufe und zeige diese über ein GRID an.

Das Formular beinhaltet unterschiedliche Abfragen, bei denen sich auch die Spalten ändern.
Gerne würde ich die Spalten formatiert anzeigen, z.B. in Currency etc.

z.B.

Code:
 
      WITH zrdnlyqry_Verkauefe do
      begin
       Active := False ;
       SQL.Clear;SQL.Add(     'SELECT');
       SQL.Add(     '  A.ARTIKEL_NR,');
       SQL.Add(     '  sum( OA.ARTIKEL_PREIS_D ) AS Sum_Umsatz,');
       SQL.Add(     '  sum( OA.ARTIKEL_EK_PREIS ) AS Sum_EK,');
       SQL.Add(     '  sum( OA.ARTIKEL_MENGE ) AS Sum_Anzahl,');
       SQL.Add(     '  CAST(( 100 *( 1 - SUM( OA.ARTIKEL_EK_PREIS ) ) / IIF( SUM( OA.ARTIKEL_PREIS_D ) = 0 ,0.01 , SUM( OA.ARTIKEL_PREIS_D ) ) ) as decimal( 6 , 2 ) ) AS ProzWert');
       SQL.Add(     ' FROM')
    :
    :
    :
;
Wie kann ich nach Abfrage die gelesenen Spalten formatieren dass z.B. ?
SUM_Umsatz als Currency ausgegeben wird.
Leider wird auch der CAST-Wert nicht in Decinmal( 6,2 ) ausgegeben einige Ergebnisse weisen nur eine Dezimalstelle andere gar keine aus.

Wie beschrieben möchte ich die Query auf dem Formular dynamische nutzen um hier ein Standardformular mit unterschiedlichen Abfrage zu füttern.
mfg wf
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 00:07
Hallo,
habe dann doch noch die Lösung gefunden. Vielleicht suchen ja auch Andere danach.

Code:
TNumericField(FieldByName('Sum_Umsatz')).DisplayFormat := '#0.00 €';
 TNumericField(FieldByName('Sum_EK')).DisplayFormat := '#0.00 €';
 TNumericField(FieldByName('ProzWert')).DisplayFormat := '#0.00 %';
Dennoch verstehe ich nicht warum CAST keinen Dezimalwert ausgibt)
mfg wf

Geändert von waldforest (10. Aug 2015 um 00:13 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 06:31
Weil das Ergebnis Delphiseitig als Float aufgefasst wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 07:44
Deine Query liefert Dezimalwerte (ob nun als decimal oder float ist egal). Dein Programm stellt diese Werte dar. Ohne explizite Angabe des Formats wird eine Zahl so genau wie nötig dargestellt. 7.00000 ist eine 7 und 1.230000000 eine 1.23 . Das ist auch vollkommen korrekt.

In einer Query bzw. mit den SQL-Datentypen 'Numeric' und 'Decimal' kannst Du die maximale Genauigkeit der internen Speicherung ('Auf 2 Nachkommastellen, 10 Stellen insgesamt') angeben, mit der *Darstellung* hat das nichts zu tun (Du kannst eine Decimal(10,2)-Zahl auch mit 3 Nachkommastellen ausgeben. Dann ist die letzte Nachkommastelle immer eine 0, aber es geht.

Erst mit einer Formatanweisung kannst du fixe Vor- oder Nachkommastellen angeben (wenn Du das möchtest).

Ich bevorzuge auch die Tausendertrennzeichen, weswegen mein bevorzugtes Format '#,0.00' ist.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 08:58
Wie beschrieben möchte ich die Query auf dem Formular dynamische nutzen um hier ein Standardformular mit unterschiedlichen Abfrage zu füttern.
Wenn es dynamisch sein soll, kannst Du direkt im SQL ein Cast auf Text versuchen. Dabei werden die Standard Settings verwendet (Decimaltrennzeichen usw.) Das macht allerdings nur Sinn, wenn es um readonly Daten geht.

Code:
cast(22.5 as varchar(50))
Leider hat man glaub ich keine Möglichkeit, das explizit mit einer Formatmaske zu versehen. Vielleicht findest Du dazu aber eine brauchbare UDF.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 09:34
Ich würde Formatierungen nicht in der Abfrage, sondern bei der Anzeige durchführen.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 09:47
Ich würde es auch nur unter gewissen Umständen machen, so hab ich es ja auch geschrieben. Der TE kann es vielleicht selbst beurteilen, ob es für Ihn in Frage kommt. Ein Hindernis ist ja hier leider die "dünne" Ausstattung bei Firebird.

Warum würdesst Du es nicht machen?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 10:24
Zitat:
Warum würdesst Du es nicht machen?
...weil nur die Anzeige für die Darstellung verantwortlich ist. Beispiel Datum: Das liegt in der DB als TDateTime. Letztendlich entscheidet die Anzeige ob es im Englischen oder Deutschem Format angezeigt wird. Du würdest auch keine 2 SQL machen um den Datumsstring schon formatiert aus der DB zu holen oder?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 10:48
Tja, also ich kann ohne Probleme einen Preis oder eine Summe dynamisch per SQL ausgeben und meinetwegen auch eine Währung berücksichtigen, ähnlich geht es bei Datumsangaben, kommt halt auch auf die Fähigkeiten des DB Systems an, wie schon gesagt.

Die Vorgabe des TE war ja ein Formular für unterschiedliche SQL Statements zu verwenden.
Jetzt kann er entweder eine Feldverwaltung mit Formatierung einbauen oder aber im einzigen Teil, der eh dynamisch ist, direkt für eine richtig formatierte Ausgabe sorgen.

Natürlich gibt es Direktiven wie "weil nur die Anzeige für die Darstellung verantwortlich ist" nicht ohne Grund, aber die sind kein Selbstzweck. In einem überschaubaren Rahmen finde ich eine Lösung mit SQL Formatierung vollkommen okay.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: SQL-Abfrage formatiert ausgeben

  Alt 10. Aug 2015, 13:53
Zitat:
Warum würdesst Du es nicht machen?
...weil nur die Anzeige für die Darstellung verantwortlich ist. Beispiel Datum: Das liegt in der DB als TDateTime. Letztendlich entscheidet die Anzeige ob es im Englischen oder Deutschem Format angezeigt wird. Du würdest auch keine 2 SQL machen um den Datumsstring schon formatiert aus der DB zu holen oder?
Jain, ich hab die Situation, das ein Std-Schreiben aus der DB gefüttert wird, da wird das Datumsformat über den Standort in der Queryausgabe gesteuert. Da ich aber eh eine Unterscheidung deutscher/englischer Brief habe, wäre es zu überlegen, dort das Datum zu formatieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 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