![]() |
Datenbank: MySQL / Access • Zugriff über: TADODataset
TADODataset und Locate
Hallo zusammen,
ich versuche meine Suchfunktion ein wenig zu erweitern. Neben dem Filer soll eine Lokalisierung des Datensatzes möglich sein. Ich gebe also einen Text im Eingabefeld ein und möchte dass der erste Datensatz in meiner Datenmenge mit dem zutreffenden Suchbegriff lokalisiert wird. Dabei ist das Feld völlig egal - es muss also nach dem Suchbegriff in allen Feldern gesucht werden. Als nice to have wäre auch eine Funktion die einen Datensatz mit einer Ähnlichkeitssuche lokalisiert. Zum Problem: 1. Locate hat scheinbar Probleme mit Integer- bzw. nonString-Feldern und gibt hierbei eine Exception aus 2. Locate führt scheinbar eine Suche mit den Anfangsbuchstaben duch und keine Ähnlichkeitssuche. Hoffe ihr könnt mir bei den beiden Problemen helfen. Danke im Voraus. Gruß, Moony |
Re: TADODataset und Locate
Du kannst ja die Methode entsprechend überladen
|
Re: TADODataset und Locate
Aber wie macht man die Routine am besten? Wenn ich doch zu fuss Datensatz für datensatz und feld für feld durchgehe daauert das unendlich lange, je nach datenmenge...
|
Re: TADODataset und Locate
Z.B. per SQL Abfrage mit LIKE
|
Re: TADODataset und Locate
Aber dann setze ich wiederum einen Filter in die Datenmenge und ich will lediglich die gesamtmenge behalten aber den richtigen datensatz lokalisieren...
|
Re: TADODataset und Locate
SQL-Code:
in extra Abfrage
select first <id> from <Tabelle> where <Feld1> like <Wert> or <Feld2> = <Wert> ...;
und dann ein Locate auf die ID. |
Re: TADODataset und Locate
Hier kommt eine Procedure die du als Filter zur Volltextsuche einsetzen kannst:
Delphi-Quellcode:
Die Funktion CompareWildText() prüft ob das Suchmuster im Datenfeld enthalten ist.
procedure TForm1.DoFilterRecord(DataSet: TDataSet;var Accept: Boolean);
var i : Integer; fields : TFields; begin fields := dataset.Fields; for i := 0 to fields.Count-1 do begin if CompareWildText(Suchmuster, fields[i].Text) then begin Accept := True; Exit; end; end; Accept := False; end; Siehe: ![]() Damit kannst du jetzt also einen Volltextfilter setzen indem du das Event OnFilterRecord auf die Methode von oben richtest. Du kannst damit aber auch Suchen. "Suchen" ist der kleine Bruder des "Filters".
Delphi-Quellcode:
procedure TForm1.Volltextsuche(Dataset:TDataset);
var accept : boolean; begin dataset.DisableControls; try while not Dataset.Eof do begin DoFilterRecord(Dataset, accept); if accept then break; // gefunden Dataset.Next; end; finally dataset.EnableControls; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 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-2025 by Thomas Breitkreuz