AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Locate mit mehreren Ergebnissen

Ein Thema von Kaarsten · begonnen am 29. Aug 2013 · letzter Beitrag vom 2. Sep 2013
Antwort Antwort
Kaarsten

Registriert seit: 29. Aug 2013
5 Beiträge
 
#1

Locate mit mehreren Ergebnissen

  Alt 29. Aug 2013, 11:03
Locate ist ja sehr praktisch und schnell zum Auffinden und Anzeigen des ersten Fundes innerhalb einer Tabelle.

Wie kann ich danach auf den zweiten Fund springen, bzw. mir anzeigen lassen?

Also quasi den Anfangswert der Suche auf die Position des gefunden Wertes setzen und weitersuchen. Ist das einfach möglich, oder muss ich das konventionell machen. Dann ist Locate in diesem Fall vollkommen unbrauchbar.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Locate mit mehreren Ergebnissen

  Alt 29. Aug 2013, 11:16
Wenn der Index mit der zu suchenden Spalte übereinstimmt ist es besser mit FindKey und while zu arbeiten. Locate arbeitet leider optimiert, so dass der erste Fund nicht unbedingt am Anfang der zu selektierenden Datenmenge steht, sondern an irgend einer. Noch besser wäre natürlich der Einsatz von SQL.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Locate mit mehreren Ergebnissen

  Alt 29. Aug 2013, 11:40
Wie kann ich danach auf den zweiten Fund springen, bzw. mir anzeigen lassen?
In den meisten Queries/Datasets gibt es die Methode LocateNext, bzw. in IbDac LocateEx mit der TLocateExOption lxNext oder auch lxNearest und lxUp (rückwärts).

Wie jedoch Union oben bereits anmerkte, ist Locate für das Iterieren durch eine ausgewählte Datenmenge weniger gut geeignet, weil Locate erstens mit der Suche nicht am Anfang der Tabelle beginnt und zeitens weniger flexibel ist, was die Selektionsmöglichkkeiten betrifft. Besser wäre hier, die gewünschte Datenmenge via SQL zu selectieren und dann vom ersten bis zum letzten Datensatz mit Next zu durchzublättern (iterieren):
Delphi-Quellcode:
MyQuery.Active := False;
MyQuery.SQL.Clear;
MyQuery.SQL.Append('select * from MyTable');
MyQuery.SQL.Append('where Strasse = ' + QuotedStr('Hauptstraße'));
MyQuery.SQL.Append('order by Strasse');
MyQuery.Open;

IF MyQuery.RecordCount > 0 THEN
While not MyQuery.Eof DO
Begin
  DoSomething(MyQuery);
  MyQuery.Next;
End;

Geändert von Perlsau (29. Aug 2013 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Kaarsten

Registriert seit: 29. Aug 2013
5 Beiträge
 
#4

AW: Locate mit mehreren Ergebnissen

  Alt 2. Sep 2013, 22:22
Tatsächlich kann LocateEx genau das, was ich gesucht hatte.

Es wird bei der weiteren Suche auf den nächsten Datensatz gesprungen.
2 Dinge muss man dazu wissen.
Die Sortierung muss für das Feld sein, welches man sucht. Anderenfalls wird die Reihenfolge innerhalb der Tabelle nicht linear abgearbeitet.

Die Uses ist nicht MemDS sondern MemData.
Und nicht vergessen den Zeiger bei veränderter Suche wieder auf den Anfang zu setzen.

Danke für Eure Hilfe.

Geändert von Kaarsten ( 2. Sep 2013 um 22:26 Uhr)
  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 02:49 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