AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL und Umlaute

Ein Thema von Klaus D. · begonnen am 9. Mär 2004 · letzter Beitrag vom 10. Mär 2004
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: SQL und Umlaute

  Alt 10. Mär 2004, 09:56
Zitat von Klaus D.:
unabhängig der Schreibweise soll der Datensatz gefunden werden.
aber mit Umlauten hat mein Code Probleme ? wieso weshalb warum ??
Damit dies funktioniert, müsste die Datenbank wissen, welchen Zeichensatz du
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:
   Table1['Fabrikat'] := 'Ferrari';

   // auf das Schattenfeld schreiben.
   // alle Schattenfeld tragen den Postfix "_MC" für "MatchCode"
   Table1['Fabrikat_MC'] := AnsiUpperCase(KonvertSonderzeichen(Table1['Fabrikat']));
Hier die Funktion KonvertSonderzeichen:
Delphi-Quellcode:
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;
Falls deine Datenbank UDFs (User Defined Functions) unterstützt, dann kann
evtl. auf die Schattenfelder verzichtet werden.

Statt
WHERE (Fabrikat_MC like :param1) schreibt man dann:
WHERE (UDF_KonvertSonderzeichen(Fabrikat_MC) like :param1)
Andreas
  Mit Zitat antworten Zitat
 


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