AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Umlaute anzeigen egal ob Ü oder UE usw.
Thema durchsuchen
Ansicht
Themen-Optionen

Umlaute anzeigen egal ob Ü oder UE usw.

Ein Thema von SKolberg · begonnen am 30. Sep 2005 · letzter Beitrag vom 12. Okt 2005
Antwort Antwort
Seite 3 von 4     123 4      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#21

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 12:27
Ihr versteht meinen Code nicht.

Inhalt in DB "Übungszünder" (Suchbegriff "ü") :

1. Übungszünder : upper (ü) = Ü ist enthalten -> gefunden.

2. uEbungszünderübung : dto.

3. Uebungszuenderuebung : kein ü, aber das ue wird in Ü umgewandelt -> gefunden

Lediglich das erste Vorkommen von ue muß ersetzt werden !!
Gruß
Hansa
  Mit Zitat antworten Zitat
Unplugged

Registriert seit: 14. Apr 2004
Ort: Leipzig
125 Beiträge
 
Delphi 6 Enterprise
 
#22

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 12:30
du verstehts meinen gedanken nicht:

bei deiner Erläuterung wird nach ü oder ue gesucht.
Wenn ich als Suchbegriff aber ein ganzes Wort vorgebe, dann gibts Probleme.

Und wenn in der DB Raesenmäher steht und ich Suche in dem Edit-Feld nach Räsenmaeher dann dürfte er das mit deiner Suche nicht finden.

Oder bin ich nun ganz blöd geworden? ^^ , obwohl, ist ja schon Freitag
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#23

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 12:40
Also gut : Räsenmäher steht in DB und als Suchbegriff wird Raesenmaeher eingegeben. Und ? Stringreplace mit rfReplaceAll für den Suchbegriff eingeben. Dann die DB durchwandern und jeden DS genauso behandeln (ä in ae umwandeln) und dann vergleichen. Und bevor jetzt noch behauptet wird, das sei langsam : so ist es. Aber was ist nicht relativ bei 3 GHz ? Durch LIKE und % hindert man die DB so oder so daran einen Index zu benutzen.
Gruß
Hansa
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#24

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 13:12
Nimm doch einfach Jellys Vorschlag und erstelle dir in deiner MySQL DB eine UDF (Userdefined Function).

Der (my)SQL Server erledigt die Zeichenersetzung flink während des Selects mit. Einfacher gehts doch garnicht. Zudem erschlägt man alle Sonderfälle auf einmal (Groß-Kleinschreibung, Umlaute,'ß'-'ss') und braucht nicht hunterdt IF's und POS(bla) im Delphi-Code verbauen.

Hier ein Beispiel in MSSQL Syntax.
Den Code kannst du mit einem kurzen Blick ins MySQL-Handbuch innerhalb weniger Minuten für MySQL anpassen.

SQL-Code:
CREATE Function ReplaceSpecialChars
  @InputParam VARCHAR(4000) -- ein Eingabeparameter an den du deinen Suchbegriff übergibst
  RETURNS VarChar(4000) -- Die Funktion liefert Varchar zurück
AS
BEGIN
  DECLARE @TMP VARCHAR(4000) -- eine Temporäre Variable deklarieren
  SET @TMP = LOWER(@InputParam) -- Suchbegriff als LowerCase in @TMP einlesen
  SET @TMP = REPLACE(@TMP,'ß','ss') -- gewünschte Zeichen ersetzen
  SET @TMP = REPLACE(@TMP,'ä','ae')
  SET @TMP = REPLACE(@TMP,'ö','oe')
  SET @TMP = REPLACE(@TMP,'ü','ue')

  RETURN @TMP -- die fertige Zeichenkette aus Result zurückgeben
END

Verwendung :

SQL-Code:
  
SELECT Vorname,Nachname FROM Personal WHERE dbo.ReplaceSpecialChars(Nachname) = LOWER(@Suchbegriff)

Falls du die Funktion sehr häufig für ein und die selben Feler bestimmter Tabellen benutzt, kannst du in der Tabelle auch flink für jedes (häufig zum suchen verwendete) Feld ein berechnetes Feld hinzufügen. Als Formel für das berechnete Feld nimmst du in diesem Fall auch "dbo.ReplaceSpecialChars(<Feldname>)".


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#25

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 13:16
Zitat von Hansa:
Also gut : Räsenmäher steht in DB und als Suchbegriff wird Raesenmaeher eingegeben.
Nee, DB Eintrag ist Raesenmäher und Suchbegriff ist Räsenmaeher.

Zitat von Hansa:
Dann die DB durchwandern und jeden DS genauso behandeln (ä in ae umwandeln) und dann vergleichen.
Das kanns doch auch nicht sein. Man will doch über eine Select Abfrage einen kompletten Recordset direkt anzeigen lassen, und nicht noch jeden einzelnen Datensatz auf Delphiebene nochmals durchlaufen, und dann nur die relevanten anzeigen. Da kannst du dein DBGrid gleich vergessen und musst die ganze Anzeige auch noch per Hand vornehmen...

Wie mein Link bereits oben zeigt geht das relativ einfach über Regular Expression, REGEXP...

Zum Suchen: entweder man vergleicht Äpfel mit Äpfel (also Räsenmäher mit Suchstring mäher), Birnen mit Birnen (Raesenmaeher mit maeher), aber nicht Äpfel mit Birnen (Räsenmäher mit maeher). Es führt also kein Weg dran vorbei, in der DB alle Einträge in ue umzuwandeln, und genauso auf Delphiebene im Suchstring.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#26

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 13:23
Zitat von jensw_2000:
Verwendung :

SQL-Code:
  
SELECT Vorname,Nachname FROM Personal WHERE dbo.ReplaceSpecialChars(Nachname) = LOWER(@Suchbegriff)
Der Mann hat mich verstanden
Noch ne Ergänzung:
um sich die Tipparbeit auf Delphiebene zu sparen, da ja der Suchstring auch umgewandelt werden muss damit die Where Bedingung pass, kann man das auch einfach so formulieren:
SELECT Vorname,Nachname FROM Personal WHERE dbo.ReplaceSpecialChars(Nachname) = dbo.ReplaceSpecialChars(@Suchbegriff) edit: Tags vergessen
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 15:26
Hai Jelly,

ab welcher Version unterstützt mySQL denn UDFs?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#28

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 17:24
Zitat von Jelly:
...Es führt also kein Weg dran vorbei, in der DB alle Einträge in ue umzuwandeln, und genauso auf Delphiebene im Suchstring.
Du schlägst aber nicht vor, die umgewandelten DB-Felder auch abzuspeichern, oder doch ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#29

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 17:25
Zitat von Hansa:
Zitat von Flocke:
..ersetze also einfach alle Ö durch (Ö|OE) usw.
Was soll er wo ersetzen ? Und wozu überhaupt ?
Na du sollst halt nicht nach
WHERE Feld LIKE 'räsenmäherOR Feld LIKE 'raesenmaeher' suchen sondern nach
WHERE Feld REGEXP 'r(ä|ae)senm(ä|ae)her'
Zitat von Hansa:
Also gut : Räsenmäher steht in DB und als Suchbegriff wird Raesenmaeher eingegeben. Und ? Stringreplace mit rfReplaceAll für den Suchbegriff eingeben. Dann die DB durchwandern und jeden DS genauso behandeln (ä in ae umwandeln) und dann vergleichen. Und bevor jetzt noch behauptet wird, das sei langsam : so ist es. Aber was ist nicht relativ bei 3 GHz ? Durch LIKE und % hindert man die DB so oder so daran einen Index zu benutzen.
Welchen Sinn macht da ein DB-Server? Erzähl das mal jemandem, der über eine ISDN-Standleitung angebunden ist - für drei Fundstellen werden alle Datensätze über's Netz übertragen. Der Sinn dabei liegt ja gerade darin, den Server die Arbeit tun zu lassen!
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Umlaute anzeigen egal ob Ü oder UE usw.

  Alt 30. Sep 2005, 17:29
Nicht schön aber selten
SQL-Code:
SELECT * FROM tabelle
WHERE REPLACE( REPLACE( REPLACE( REPLACE(Lower( feldname ), 'ä', 'ae'), 'ö', 'oe'), 'ü','ue'), 'ß', 'ss') = Lower(:param)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 06:36 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