![]() |
SQL und Umlaute
Moin
ich komm nicht weiter....erst einmal den Code Edit1.OnChange_:
Code:
SQL_:
frmDataMod.SQL_Typenschild.Params[0].AsString :=(UPPERCASE('%'+frmMain.V_Fabrikat+'%'));
Code:
unabhängig der Schreibweise soll der Datensatz gefunden werden.
SELECT MA.Motorart
, MA.id_Motorart , TS.id_Typenschild , TS.sid_Motorart , TS.sid_Fabrikat , TS.Typ , TS.Drehzahl , TS.Motornummer , TS.Leistung_KW , FA.Fabrikat , SPF.Spannung AS Feldspannung , SPL.Spannung AS Lauferspannung FROM tbl_Typenschild TS INNER JOIN tbl_Motorart MA ON (MA.id_Motorart=TS.sid_Motorart) LEFT OUTER JOIN tbl_Spannung SPF ON (SPF.id_Spannung=TS.sid_Spannung_Feld) LEFT OUTER JOIN tbl_Spannung SPL ON (SPL.id_Spannung=TS.sid_Spannung_Anker) LEFT OUTER JOIN tbl_Fabrikat FA ON (TS.sid_Fabrikat=FA.id_Fabrikat) LEFT OUTER JOIN tbl_Spannung SP ON (TS.sid_Spannung_Feld=SP.ID_Spannung) WHERE ((UPPER(Typ) like :p1) OR (UPPER(Fabrikat) like :p1) OR (UPPER(Drehzahl) like :p1) OR (UPPER(Motornummer) like :p1) OR (UPPER(Leistung_KW) like :p1) OR (UPPER(SPF.Spannung) like :p1)) :gruebel: aber mit Umlauten hat mein Code Probleme ? wieso weshalb warum ?? wo ist mein Fehler ??? Danke schon mal--> Klaus |
Re: SQL und Umlaute
Hallo Klaus,
falls Deine DB Umlaute unterstützt, dann fällt mir so auf die Schnelle nur folgendes ein:
Code:
Uppercase ist nur für 7-Bit ASCII geeignet.
frmDataMod.SQL_Typenschild.Params[0].AsString :=([color=red][b]AnsiUpperCase[/b][/color]('%'+frmMain.V_Fabrikat+'%'));
|
Re: SQL und Umlaute
Hai Klaus D.
was für einen DB-Server hast Du denn? Zumindes mein MS-SQL 7 und 2000 sowie mein MySQL 4.x unterscheiden bei einem Vergeleich mit LIKE keine Groß- / Kleinschreibung. |
Re: SQL und Umlaute
Oracle schon...
|
Re: SQL und Umlaute
Zitat:
verwendest und ob Gross-/Kleinschreibung als gleich oder ungleich betrachtet werden soll. Der MS SQL Server 2000 verwendet hierfür sogenannte Collations. (siehe Online-Help zum SQL Server Stichwort COLLATE) Wenn man sich unabhängig von der Datenbank machen möchte, muss man Schattenfelder in den Tabellen speichern. Hier ein Beispiel:
Delphi-Quellcode:
Hier die Funktion KonvertSonderzeichen:
Table1['Fabrikat'] := 'Ferrari';
// auf das Schattenfeld schreiben. // alle Schattenfeld tragen den Postfix "_MC" für "MatchCode" Table1['Fabrikat_MC'] := AnsiUpperCase(KonvertSonderzeichen(Table1['Fabrikat']));
Delphi-Quellcode:
Falls deine Datenbank UDFs (User Defined Functions) unterstützt, dann kann
function KonvertSonderzeichen(const s: string): string;
var i,slen: integer; src,dst: PChar; begin slen := Length(s); SetLength(Result, slen * 2); // Ergebnis kann u.U. doppelt so groß if slen = 0 then Exit; src := PChar(@s[1]); dst := PChar(@Result[1]); for i := 1 to slen do begin case src^ of 'ä': begin dst[0] := 'a'; dst[1] := 'e'; Inc(dst); end; 'ö': begin dst[0] := 'o'; dst[1] := 'e'; Inc(dst); end; 'ü': begin dst[0] := 'u'; dst[1] := 'e'; Inc(dst); end; 'Ä': begin dst[0] := 'A'; dst[1] := 'E'; Inc(dst); end; 'Ö': begin dst[0] := 'O'; dst[1] := 'E'; Inc(dst); end; 'Ü': begin dst[0] := 'U'; dst[1] := 'E'; Inc(dst); end; 'ß': begin dst[0] := 's'; dst[1] := 's'; Inc(dst); end; 'à','á','â','ã','å': begin dst^ := 'a'; end; 'À','Á','Â','Ã','Å': begin dst^ := 'A'; end; 'è','é','ê','ë': begin dst^ := 'e'; end; 'È','É','Ê','Ë': begin dst^ := 'E'; end; 'ì','í','î','ï': begin dst^ := 'i'; end; 'Ì','Í','Î','Ï': begin dst^ := 'I'; end; 'ò','ó','ô','õ': begin dst^ := 'o'; end; 'Ò','Ó','Ô','Õ': begin dst^ := 'O'; end; 'ù','ú','û': begin dst^ := 'u'; end; 'Ù','Ú','Û': begin dst^ := 'U'; end; 'ñ': begin dst^ := 'n'; end; 'Ñ': begin dst^ := 'N'; end; 'ý','ÿ': begin dst^ := 'y'; end; 'Ý': begin dst^ := 'Y'; end; 'ç': begin dst^ := 'c'; end; 'Ç': begin dst^ := 'C'; end; '°': begin dst^ := 'o'; end; // Bernc#18.12.03 else dst^ := src^; end; Inc(dst); Inc(src); end; SetLength(Result, dst-PChar(@Result[1])); end; evtl. auf die Schattenfelder verzichtet werden. Statt
SQL-Code:
schreibt man dann:
WHERE (Fabrikat_MC like :param1)
SQL-Code:
WHERE (UDF_KonvertSonderzeichen(Fabrikat_MC) like :param1)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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