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
Antwort Antwort
Klaus D.

Registriert seit: 27. Okt 2003
Ort: 03238 Finsterwalde
124 Beiträge
 
Delphi 6 Professional
 
#1

SQL und Umlaute

  Alt 9. Mär 2004, 18:23
Moin

ich komm nicht weiter....erst einmal den Code
Edit1.OnChange_:
Code:
frmDataMod.SQL_Typenschild.Params[0].AsString :=(UPPERCASE('%'+frmMain.V_Fabrikat+'%'));
SQL_:
Code:
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))
unabhängig der Schreibweise soll der Datensatz gefunden werden.
aber mit Umlauten hat mein Code Probleme ? wieso weshalb warum ??
wo ist mein Fehler ???

Danke schon mal--> Klaus
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: SQL und Umlaute

  Alt 9. Mär 2004, 18:28
Hallo Klaus,
falls Deine DB Umlaute unterstützt, dann fällt mir so auf die Schnelle nur folgendes ein:
Code:
frmDataMod.SQL_Typenschild.Params[0].AsString :=([color=red][b]AnsiUpperCase[/b][/color]('%'+frmMain.V_Fabrikat+'%'));
Uppercase ist nur für 7-Bit ASCII geeignet.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: SQL und Umlaute

  Alt 10. Mär 2004, 07:16
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: SQL und Umlaute

  Alt 10. Mär 2004, 07:32
Oracle schon...
  Mit Zitat antworten Zitat
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
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 12:38 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