Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi in Datenbank nach nicht exakten Suchbegriffen suchen (https://www.delphipraxis.net/109949-datenbank-nach-nicht-exakten-suchbegriffen-suchen.html)

f4k3 10. Mär 2008 15:33

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

in Datenbank nach nicht exakten Suchbegriffen suchen
 
Seid gegrüßt liebe DPler ;),

Hab folgende Frage ...

Ich arbeite an einer Software, die einen sehr hohen Kundenstamm verwaltet.
Nun habe ich eine Form auf der eine Suche nach einem Kunden durchgeführt werden kann.
Da ich von meinen Anwendern nicht verlangen möchte, dass Sie sich exakt z.B. den Namen des Kunden merken, möchte ich in meiner
Abfrage auch den Kunden Fritz anzeigen lassen wenn der kunde nur "fri" als suchbegriff definiert hat.

Ich verwende keinen Query weil ich in Delphi noch nie damit gearbeitet hab,
und nicht weiß wie ich des zeugs verwende.

Rein theoretisch in den SQL-Bereich die SQL-Befehle reinschreiben und beim click auf den Suchenbutton den Query losjagen ... aber
die Zeit erlaubt mir momentan keine Spielerein.

Also ich verwende demnach die Table.locate Variante ...

Wenn ich einen exakten Suchbegriff haben möchte weiß ich dass ich die Option
Delphi-Quellcode:
tKunde.Locate('Name' , eSuchbegriff.Text, [loCaseInsensitive])
verwenden kann.

Weil das Programm jetzt nicht direkt das Pro-Programm werden muss, und es eigentlich nur ein internes Projekt ist,
Speichere ich den Kundennamen in einem Char - Feld in der Datenbank.

Ich trenne also nicht Vor- und Nachname.

Ich hab auf Delphi-Treff - Datenbank Tipps & Tricks gesehen,
das man mit Variant als Option nach teilweise enthaltenen Stücken gesucht waren kann.

meine schlaue idee ...

Delphi-Quellcode:
tMitarbeiter.Locate('Berufsbez' , eSuchbegriff.Text, [Variant])
nun bekomm ich aber eine überaus hilfreiche Fehlermeldung
'(' erwartet aber ']' gefunden.

braucht Variant noch irgendwelche Parameter?
wenn ja welche? ;)

kann ich wenn ich 2 Optionen festlegen möchte z.B.
Delphi-Quellcode:
tMitarbeiter.Locate('Berufsbez' , eSuchbegriff.Text, [Variant, loCaseInsensitive])
so schreiben?

Vielen dank für eure Hilfe ;) Euer f4k3

s-off 10. Mär 2008 15:44

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Hallo,

während Du auf Antworten wartest, hättest Du Dich ja schon längst in Queries einarbeiten, und 'like' benutzen können.
Meiner Meinung nach wirst Du so irgendwann auf der Strecke bleiben. Locate wirst Du übrigens auch beim Einsatz von Queries verwenden müssen, wenn Du ein Suchergebnis analysieren willst und performant bleiben willst.

nachtstreuner60 10. Mär 2008 15:55

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Hallo f4k3

s-off hat Recht, der SQL Befehl Like mit Platzhalter %ri% würde deine Antwort ausspucken.
wobei ri ein Teil des Suchbegriffs darstellt

Gruss nachtstreuner60 SQL-Lernen schadet nie... :roll:

Union 10. Mär 2008 16:24

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Delphi-Quellcode:
tKunde.Locate('Name' , eSuchbegriff.Text, [loCaseInsensitive, loPartialKey])
Wäre eine Lösung für Dein Problem. Dann findet "Ichb" auch "IchbenutzeF1nicht".

s-off 10. Mär 2008 16:38

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Zitat:

Zitat von Union
Dann findet "Ichb" auch "IchbenutzeF1nicht".

Sehr schön formuliert :mrgreen: :thumb:

f4k3 13. Mär 2008 08:49

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Zitat:

Zitat von Union
Delphi-Quellcode:
tKunde.Locate('Name' , eSuchbegriff.Text, [loCaseInsensitive, loPartialKey])
Wäre eine Lösung für Dein Problem. Dann findet "Ichb" auch "IchbenutzeF1nicht".

sehr witzig ^^

soweit war ich schon,

mit dieser Variante wird aber nicht "f1nicht" gefunden ...

Union 13. Mär 2008 09:09

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Dann wirst Du entweder um SQL nicht herumkommen oder Du mußt Dein gesamtes DataSet sequentiell durchsuchen, den loPartialKey sucht nur einen Teil am Anfang einer Zeichenkette, nicht in der Mitte oder am Ende:
Delphi-Quellcode:
Function FindeTeilDesKundenNamen(ATeil : string) : boolean;
begin
  ATeil := AnsiUpperCase(ATeil);
  result := False;
  tKunden.First;
  while not tKunden.Eof do
  begin
    if Pos(ATeil, AnsiUpperCase(tKunden.FieldByName('Name').AsString)) > 0 then
    begin
      result := True;
      Break;
    end;
    TKunden.Next;
  end;
end;

Peinhard 13. Mär 2008 09:16

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Zitat:

Zitat von f4k3
mit dieser Variante wird aber nicht "f1nicht" gefunden ...

Eine inkrementelle Suche - und nichts anderes ist Locate mit loPartialkey - beginnt nun einmal immer 'vorne'. Wenn du auch Teilstrings in der Mitte finden willst, bleibt dir nur der Vorschlag von nachtstreuner mit SQL %Suchbegriff% - oder die wenig performante while not eof-Schleife mit Pos(). Du hast dann allerdings auch ein anderes Interface-Verhalten - statt 'Anspringen' eines Datensatzes sinnvollerweise die Einschränkung der Auswahl.

f4k3 13. Mär 2008 09:47

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Zitat:

Zitat von Peinhard
Zitat:

Zitat von f4k3
mit dieser Variante wird aber nicht "f1nicht" gefunden ...

Eine inkrementelle Suche - und nichts anderes ist Locate mit loPartialkey - beginnt nun einmal immer 'vorne'. Wenn du auch Teilstrings in der Mitte finden willst, bleibt dir nur der Vorschlag von nachtstreuner mit SQL %Suchbegriff% - oder die wenig performante while not eof-Schleife mit Pos(). Du hast dann allerdings auch ein anderes Interface-Verhalten - statt 'Anspringen' eines Datensatzes sinnvollerweise die Einschränkung der Auswahl.

jaja ... habs ja eingesehen.

Hab die Felder nun einfach getrennt.
man kann nun also nach Vor- ODER Nachnamen suchen.

somit brauch ich keine umständliche Variante ... Danke für eure Hilfe ...

euer f4k3

hoika 13. Mär 2008 12:03

Re: in Datenbank nach nicht exakten Suchbegriffen suchen
 
Hallo,

was ist aber, wenn du im Wort suche willst ?
Oder schlimmer noch, der Anwender ? ;)

Da du anscheinend noch beim Coden bist,
wieder der Rat, Finger weg von Paradox.

Such mal im Netz nach "paradox index out of date"
oder "paradox blob file has been changed".

Ich würde Firebird nehmen.

Ich habe fast 8 Jahre mit Paradox gearbeitet (müssen ;) )
und bin froh, jetzt weg zu sein.
Früh um 05:30 Kundenanruf "Indexfehler, das Programm läuft nicht ..."


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Seite 1 von 2  1 2      

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