Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#54

Re: In Datenbank(Edit1.Txt) suchen

  Alt 15. Jun 2009, 14:37
AnsiContainsText ist einfacher als Pos. Vielleicht erkennt dein Lehrer das Problem nicht, aber es ist ein Problem.

Die Funktion Pos ist einfach, effektiv, aber man muß auch sehr aufpassen, denn es kann dir andere Ergebnisse liefern als du möchtest. Pos verzeiht keine Fehler. Hier paar Beispiele:

Die Abfrage

if Pos('maier', 'Hans Maier') > 0 then ...

oder

if Pos('Maier', 'Hans MAIER') > 0 then ...

wird nichts finden, denn für Pos ist "maier" und "Maier" nicht gleich. Der Nutzer des Programms muß den Suchtext also genau eingeben. Der Nutzer weiß aber nicht wie der Name in der Datenbank gespeichert ist. Hier gibt es also eine mögliche Fehlerquelle. Es ist deshalb in solchen Fällen üblich solche Fehlerquellen bei der Überprüfung abzufangen. Man erreicht es in dem man beide Texte upper oder lower case überprüft, d.h. man überprüft beide Texte eintweder in Groß- oder Kleinbuchstaben, z.B.,

if Pos('MAIER', 'HANS MAIER') > 0 then ...

oder

if Pos('maier', 'hans maier') > 0 then ...

Und wie erreicht man das? Man packt beide Texte in eine Funktion, z.B. UpperCase().

if Pos(UpperCase('maier'), UpperCase('Hans Maier')) > 0 then ...

Jetzt ist es egal wie die Texte geschrieben sind, denn UpperCase macht sie gleich.

Allerdings macht UpperCase nur die Ascii-Zeichen groß. Damit die deutschen Umlautzeichen, also ä, ö, Ü usw. berücksichtigt werden, macht man das mit der neueren Funktion AnsiUpperCase. Hier werden auch ä, ö und Ü berücksichtigt. Die Abfrage sieht dann so aus:

if Pos(AnsiUpperCase('müller'), AnsiUpperCase('Hans Müller')) > 0 then ...

Da ist also nichts kompliziertes dabei, sondern man denkt bei der Programmierung mit und hat nicht die Einstellung von wegen: was interessiert mich wenn der Nutzer den Namen falsch eingibt. Es ist dann sein Problem.

Wenn du das nicht machen wirst weil es dir zu kompliziert ist, dann geh zu deinem Lehrer und sag, daß du nicht den Draht zu Programmierung hast und möchtest lieber in den Kochkurs gehen. Denn wenn du nicht bereit bist es besser als ausreichen zu machen, dann solltest du es lassen. Ausreichend, das ist die 4 als Note.

Ok, und was hat es dann mit AnsiContainsText auf sich? AnsiContainsText ist nicht besser als Pos mit AnsiUpperCase, aber etwas kürzer.

if AnsiContainsText ('Hans Müller', 'müller') then ...

Diese Abfage bedeutet: prüfe ob sich 'müller' in dem Text 'Hans Müller' befindet. Ignoriere dabei die Groß- und Kleinschreibung und beachte dabei alle Zeichen, also auch Umlautzeichen.

Übrigens, das Beispiel was ich oben gepostet habe, also noch einfacher geht es nicht. Erstens ist csv Standard, d.h. diese csv Datenbank kannst du mit jedem anderen Datenbankprogramm auch öffnen, also auch mit Access oder Excel. Und es sucht im ganzen Datensatz. Und es ist kurz.

Ein Tipp: werde offener, denn du verbringst lieber das ganze Wochenende damit anderen zu sagen was du nicht verstehst, also dir fünf Minuten lang eine Funktion in der Delphi-Hilfe anzusehen. Sehr effizient.
  Mit Zitat antworten Zitat