AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken In Datenbank(Edit1.Txt) suchen
Thema durchsuchen
Ansicht
Themen-Optionen

In Datenbank(Edit1.Txt) suchen

Offene Frage von "xv300"
Ein Thema von xv300 · begonnen am 13. Jun 2009 · letzter Beitrag vom 17. Jun 2009
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

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
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 13:47 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 by Thomas Breitkreuz