AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADODataset und Locate
Thema durchsuchen
Ansicht
Themen-Optionen

TADODataset und Locate

Ein Thema von Moony · begonnen am 18. Mai 2010 · letzter Beitrag vom 18. Mai 2010
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

TADODataset und Locate

  Alt 18. Mai 2010, 12:04
Datenbank: MySQL / Access • Zugriff über: TADODataset
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
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TADODataset und Locate

  Alt 18. Mai 2010, 12:06
Du kannst ja die Methode entsprechend überladen
Markus Kinzler
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TADODataset und Locate

  Alt 18. Mai 2010, 12:18
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...
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TADODataset und Locate

  Alt 18. Mai 2010, 12:20
Z.B. per SQL Abfrage mit LIKE
Markus Kinzler
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TADODataset und Locate

  Alt 18. Mai 2010, 13:10
Aber dann setze ich wiederum einen Filter in die Datenmenge und ich will lediglich die gesamtmenge behalten aber den richtigen datensatz lokalisieren...
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: TADODataset und Locate

  Alt 18. Mai 2010, 13:12
select first <id> from <Tabelle> where <Feld1> like <Wert> or <Feld2> = <Wert> ...; in extra Abfrage
und dann ein Locate auf die ID.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: TADODataset und Locate

  Alt 18. Mai 2010, 15:25
Hier kommt eine Procedure die du als Filter zur Volltextsuche einsetzen kannst:
Delphi-Quellcode:
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;
Die Funktion CompareWildText() prüft ob das Suchmuster im Datenfeld enthalten ist.
Siehe: Stringvergleich mit Wildcards

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;
Andreas
  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 12:28 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