Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank-Suche mit Locate (https://www.delphipraxis.net/50671-datenbank-suche-mit-locate.html)

matt11 29. Jul 2005 11:44

Datenbank: Paradox • Zugriff über: Delphi

Datenbank-Suche mit Locate
 
Ich suche eine einfache Funktion zum Durchsuchen einer Datenbank nach beliebigen Teilstrings. Mit Locate
Delphi-Quellcode:
Table1.Locate('name', 'hans', [loPartialKey]);
klappt das schon ganz gut, solange das Suchkriterium am Anfang des Datenfeldes zu finden ist.
Wie kann ich aber nun eine Übereinstimmung in der Mitte oder am Ende eines Wortes finden? Ich meine, wenn im Datenfeld z.B. 'Hans-Jürgen' steht und ich nun nicht nach 'hans' sondern nach 'jürgen' suchen möchte.

MrSpock 29. Jul 2005 11:52

Re: Datenbank-Suche mit Locate
 
Hallo matt11,

das geht am besten über ein SQL Statement, bei dem zu den LIKE Operator nutzt. Suche einmal nach LIKE im Forum. Der Einsatz wurde schon oft besprochen.

matt11 29. Jul 2005 13:05

Re: Datenbank-Suche mit Locate
 
Danke MrSpock,

ich hatte schon fast erwartet, dass ihr mir eine SQL-Abfrage empfehlen werdet. Scheint wohl doch die einzig brauchbare Methode zu sein. Ich dachte nur, dass ich in diesem Fall mit Delphi-Befehlen auskomme, aber dem ist wohl nicht so.

MrSpock 29. Jul 2005 20:50

Re: Datenbank-Suche mit Locate
 
Hallo matt11,

naja, du könntest natürlich auch in einer Schleife durch die Datenmenge laufen und dann den Inhalt des Feldes mit Pos() analysieren.

matt11 1. Aug 2005 10:48

Re: Datenbank-Suche mit Locate
 
Hallo MrSpock,

so hab' ich's letztlich auch gemacht. Bei der Menge der zu erwartenden Daten funktioniert das praktisch auch ganz gut. Ich dachte eben nur, wenn ich schon eine indizierte Datenbank habe, müsste ich auch eine seriöse Suchfunktion benutzen, aber so geht's auch.

Matt

Texas 1. Aug 2005 18:55

Re: Datenbank-Suche mit Locate
 
hallo matt11

bei einem TTable kanst Du auch einen Filter setzen

Delphi-Quellcode:
procedure TForm1.SuchenBitBtnClick(Sender: TObject);
var s : string;
begin
s := '';
s := 'Name like' + '''' + '%ller%' + '''' + ' or Strasse < ' + '''' + 'Neuestr' + '''' ;
(gibt mir alle Namen wie Müller, Miller, Schiller etc und alle Strassen die kleiner als Neuestr)
Table1.filter := s;
Table1.filtered := true;
end;
wenn nicht mehr benötigt
Delphi-Quellcode:
Table1.filtered := false;
Gruß Texas

joachimd 2. Aug 2005 07:16

Re: Datenbank-Suche mit Locate
 
Zitat:

Zitat von Texas
bei einem TTable kanst Du auch einen Filter setzen

Delphi-Quellcode:
procedure TForm1.SuchenBitBtnClick(Sender: TObject);
var s : string;
begin
s := '';
s := 'Name like' + '''' + '%ller%' + '''' + ' or Strasse < ' + '''' + 'Neuestr' + '''' ;
(gibt mir alle Namen wie Müller, Miller, Schiller etc und alle Strassen die kleiner als Neuestr)
Table1.filter := s;
Table1.filtered := true;
end;

Aber Achtung: Like wird m.W. bei keiner DB im Filter unterstützt. Die zugehörige XBase-Style Expression ist $:
Delphi-Quellcode:
 s:= '"ller" $ Name';

RavenIV 2. Aug 2005 07:59

Re: Datenbank-Suche mit Locate
 
Zitat:

Zitat von Texas
hallo matt11

bei einem TTable kanst Du auch einen Filter setzen

wobei man wo es geht auf TTable verzichten sollte.
Lieber ein TQuery mit "SELECT ab FROM xy WHERE field LIKE %text%" verwenden.

gruessle


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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