![]() |
Spaß mit UPPERCASE / LOWERCASE ?
Moin,
Aufgabe: Einen Datensatz anhand eines Namens in einer DB finden. Ein Editfeld enthält den zu suchenden Begriff: "König Günter". Damit ich bei der Schreibweise kein Theater bekomme, habe ich die Vergleichswerte in Großschrift gewandelt: Das Coding sieht so aus:
Delphi-Quellcode:
und das kommt in der Query an:qryKd.SQL.Text := sSQL + ' AND UPPER(Kd.Name1) LIKE ' + QuotedStr(UPPERCASE(TRIM(edtName1.Text)) + '%') + ' ORDER BY Kd.Name1';
Delphi-Quellcode:
AND UPPER(Kd.Name1) LIKE 'KöNIG GüNTER%' ORDER BY Kd.Name1
Ich finde natürlich nicht einen Datensatz, da die Umlaute nicht in Großschrift übersetzt worden sind! Nächste Idee: Alles auf Kleinschrift bringen:
Delphi-Quellcode:
Ergebnis:qryKd.SQL.Text := sSQL + ' AND LOWER(Kd.Name1) LIKE ' + QuotedStr(LOWERCASE(TRIM(edtName1.Text)) + '%') + ' ORDER BY Kd.Name1';
Delphi-Quellcode:
Diesmal bleiben groß geschriebenen Umlaute auch in Großschrift.
AND LOWER(Kd.Name1) LIKE 'kÖnig günter%' ORDER BY Kd.Name1
Ich werde wohl die Umlaute durch die benötigten Ascii-Werte ersetzen müssen. Weiß jemand, warum die Umlaute von UPPERCASE nicht groß gemacht werden, bzw. bei LOWERCASE nicht klein gemacht werden? |
AW: Spaß mit UPPERCASE / LOWERCASE ?
|
AW: Spaß mit UPPERCASE / LOWERCASE ?
Guckst du hier:
![]() Hier würde ich aber empfehlen 1, Umstellen auf Parametrisierte Abfragen 2, Das uppercase auch für deinen Parameterwert auf DB-Ebene durchführen zu lassen 3, Überlegen das Feld Kd.Name1 auf DB-Ebene als Case-Insensitive anlegen zu lassen |
AW: Spaß mit UPPERCASE / LOWERCASE ?
Zitat:
Selbst wenn man die Konvertierung explizit selbst vornimmt ( if s[i]='ä' then s[i]:='Ä' ), ist noch immer nicht gesagt, dass dann die Datenbank-Engine gleich konvertiert. Es ist sicherer, beides von der Datenbank-Engine machen zulassen, sofern sie eine Konvertierungsfunktion zur Verfügung stellt.
Delphi-Quellcode:
qryKd.SQL.Text := sSQL +
' AND UPPER(Kd.Name1) LIKE UPPER(' + QuotedStr(UPPERCASE(TRIM(edtName1.Text)) + '%') + ')' + ' ORDER BY Kd.Name1'; |
AW: Spaß mit UPPERCASE / LOWERCASE ?
Spitze! - Ich hatte nicht damit gerechnet, das das schon dokumentiert war - sorry! Hätte ich nach suchen sollen!
Aber zum Thema: Mit ASCILOWER und ASCIUPPER läuft das! Danke!! |
AW: Spaß mit UPPERCASE / LOWERCASE ?
Die Konvertierung beider Werte in der IBM DB2 erscheint mir hier noch die beste Lösung zu sein! Das läuft nun auch schon so.
Vielen Dank an Bernhard und dummzeuch! (Schreibfehler korrigiert) |
AW: Spaß mit UPPERCASE / LOWERCASE ?
DB2 scheint expression indices zu unterstützen. Das wäre dann der Weg der Wahl.
|
AW: Spaß mit UPPERCASE / LOWERCASE ?
da hab ich leider keinen Einfluss drauf - die DB wird von einem externen Softwareanbieter gepflegt.
|
AW: Spaß mit UPPERCASE / LOWERCASE ?
So richtig spaßig wird es dann mit den beiden türkischen i's:
![]() Zitat:
|
AW: Spaß mit UPPERCASE / LOWERCASE ?
Hallo Uwe,
jetzt sag nicht, dass Du auch noch türkisch sprichst?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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