AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Thema durchsuchen
Ansicht
Themen-Optionen

Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

Ein Thema von RWarnecke · begonnen am 10. Mär 2013 · letzter Beitrag vom 10. Mär 2013
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:00
Datenbank: Absolute Database • Version: 6.2.0 • Zugriff über: ComponentAce
Hallo zusammen,

in einem Programm von einem Kunden benutze ich DB-Komponenten. Genauer gesagt habe ich das Problem bei einer TAdvDBLookupCombobox. Hier wird für die Listsource eine Query ausgeführt und der Inhalt als Auswahl in der TAdvDBLookupCombobox angezeigt. Das funktioniert auch soweit sehr gut. Jetzt zum eigentlichen Problem, ich habe in der Query ein Integer-Feld welches ich mit dem Befehl cast zu einem String mache.
Code:
  cast(facility.AiCode as String)
Bisher wurden immer nur 4-stellige Zahlen in der Spalte eingetragen. Nun sollen in der gleichen Spalte auch 1 - 3 stellige Zahlen stehen können und diese sollen dann entsprechend vorne mit Nullen aufgefüllt werden, wenn die Query für die Listsource in der TAdvDBLookupCombobox ausgeführt wird. Ein Beispiel, wenn in der DB-Tabelle eine 5 steht, dann soll bei dem obenstehenden CAST-Befehl 0005 herauskommen.

Gibt es hier einen SQL-Befehl, der mir so eine Ausgabe ermöglicht oder muss ich die Komponente TAdvDBLookupCombobox durch eine normale Combobox ersetzen und die Formatierung der Zahl im Quelltext vornehmen ?
Rolf Warnecke
App4Mission

Geändert von RWarnecke (10. Mär 2013 um 08:15 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:04
Warum wird auf String gecastet?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:07
Wenn ich die TAdvDBLookupCombobox richtig verstanden habe, kann ich in der Auswahl nur Strings anzeigen lassen. Also muss ich doch ein Integer zu einem String casten.

Edit:
Hier mal die komplette SQL-Anweisung, vielleicht hilft es ja zum besseren Verständnis für mein Problem.
Code:
select facility.*,
       province.AaLong as AaProvinceLong,
       province.AaShort as AaProvinceShort,
       province.AaCenter as AaProvinceCenter,
       district.AaName as AaDistrictName,
       country.AaLong as AaCountryLong,
       country.AaShort as AaCountryShort,
       facility_type.AaShort as AaFacilityTypeShort,
       facility_type.AaLong as AaFacilityTypeLong,
       (AaProvinceShort + AaFacilityTypeShort + cast(facility.AiCode as String)) as AaCode
   from (facility
         LEFT JOIN province
         ON facility.AiProvince = province.SiProvince
         LEFT JOIN district
         ON facility.AiDistrict = district.SiDistrict
         LEFT JOIN country
         ON facility.AiCountry = country.SiCountry
         LEFT JOIN facility_type
         ON facility.AiFacilitytype = facility_type.SiFacilitytype
         )
   order by AaCode ASC;
Es geht dabei um den AiCode. Dieser soll immer vierstellig angezeigt werden.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (10. Mär 2013 um 08:14 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:37
Also ich würde das über die Eigenschaft 'DisplayFormat' des persistenten Integer-Feldes des TDataset steuern.

Grundsätzlich sollten Daten aus dem SQL-Server so unverändert wie möglich eingelesen werden. Die Interpretation, d.h. die Darstellung erfolgt im Client.

Und nebenbei: Mir wäre es neu, wenn ein DB-Steuerelement einen expliziten Datentyp verlangt (Checkbox/Radiobutton mal ausgenommen), denn dem Steuerelement sollte es genügen, die Anzeige über die DisplayText-Eigenschaft des Feldes abzuwickeln. Und dann ist es egal, um was für einen Datentyp es sich handelt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:43
Zitat:
Wenn ich die TAdvDBLookupCombobox richtig verstanden habe, kann ich in der Auswahl nur Strings anzeigen lassen. Also muss ich doch ein Integer zu einem String casten.
Dann würde ich eine andere Komponente nehmen. Alle die ich kenne, können andere Felder als String anzeige,

Aber du willst ja nicht das eine Feld sondern ein verkettetes Feld ausgeben. Ich würde diese getrennt Abfragen und im Programm zur Anzeige Verketten, über einen Format-Befehl kannst du so auch mit Nullen auffüllen
Markus Kinzler
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 08:45
Zitat:
Wenn ich die TAdvDBLookupCombobox richtig verstanden habe, kann ich in der Auswahl nur Strings anzeigen lassen. Also muss ich doch ein Integer zu einem String casten.
Dann würde ich eine andere Komponente nehmen. Alle die ich kenne, können andere Felder als String anzeige,
Und ich würde mal sagen, das da was falsch verstanden wurde. So eine Komponente, von TMS, und dann nur Strings? Im Leben nicht.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 10:42
Ich kenne Absolutedatabase nicht aber vielleicht gibt es da so etwas wie
Code:
to_char(wert,'00009')
da sollte dann 5 zu 00005 werden

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 12:09
Hallo zusammen,

danke erstmal für die vielen Antworten. Ich habe jetzt eine für mich akzeptable Lösung gefunden. Vielleicht ein bisschen umständlich, aber sie funktioniert.
Code:
select facility.*,
       province.AaLong as AaProvinceLong,
       province.AaShort as AaProvinceShort,
       province.AaCenter as AaProvinceCenter,
       district.AaName as AaDistrictName,
       country.AaLong as AaCountryLong,
       country.AaShort as AaCountryShort,
       facility_type.AaShort as AaFacilityTypeShort,
       facility_type.AaLong as AaFacilityTypeLong,
       (AaProvinceShort + AaFacilityTypeShort + substring("000" + cast(facility.AiCode as string), Length("000" + cast(facility.AiCode as string)) - 3, Length("000" + cast(facility.AiCode as string)))) as AaCode  
   from (facility                                                                                                                                                                              
         LEFT JOIN province
         ON facility.AiProvince = province.SiProvince
         LEFT JOIN district
         ON facility.AiDistrict = district.SiDistrict
         LEFT JOIN country
         ON facility.AiCountry = country.SiCountry
         LEFT JOIN facility_type
         ON facility.AiFacilitytype = facility_type.SiFacilitytype
         )                        
   order by AaCode ASC;
Ich bin aber für weitere Vorschläge offen, wie man es komplett über SQL lösen kann.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung

  Alt 10. Mär 2013, 13:26
Es geht dabei um den AiCode. Dieser soll immer vierstellig angezeigt werden.
Schau dir mal LPAD an:
http://www.techonthenet.com/oracle/functions/lpad.php

In anderen SQL-Sprachen heißt es auch schon mal PADL:
http://devzone.advantagedatabase.com...xpeng/padl.htm

Und wenn das funktioniert, kannst du mal probieren den CAST wegzulassen (sollte automatisch konvertiert werden).

OK, gerade erst gesehen das du Absolute Database verwendest. Da wirst du wohl bei deiner Lösung bleiben müssen

Ich bin aber für weitere Vorschläge offen, wie man es komplett über SQL lösen kann.
Deine Lösung ist Komplett in SQL

Geändert von HeZa (10. Mär 2013 um 13:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:57 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