![]() |
Datenbank: Absolute Database • Version: 6.2.0 • Zugriff über: ComponentAce
Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
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:
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.
cast(facility.AiCode as String)
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 ? |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Warum wird auf String gecastet?
|
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
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:
Es geht dabei um den AiCode. Dieser soll immer vierstellig angezeigt werden.
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; |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
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. |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Zitat:
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 |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Zitat:
|
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Ich kenne Absolutedatabase nicht aber vielleicht gibt es da so etwas wie
Code:
da sollte dann 5 zu 00005 werden
to_char(wert,'00009')
Gruß K-H |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
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:
Ich bin aber für weitere Vorschläge offen, wie man es komplett über SQL lösen kann.
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; |
AW: Einen gecasteten String mit Zeichen auffüllen in einer SQL Anweisung
Zitat:
![]() In anderen SQL-Sprachen heißt es auch schon mal PADL: ![]() 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 Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz