Share via


LOCATE-Befehl

Durchsucht die Tabelle fortlaufend nach dem ersten Datensatz, der auf das angegebene Muster passt.

LOCATE [FOR lExpression1]   [WHILE lExpression2]   [NOOPTIMIZE]

Parameter

  • FOR lExpression1
    Durchsucht die aktuelle Tabelle fortlaufend nach dem ersten Datensatz, der auf den logischen Ausdruck lExpression1 passt.

    Rushmore optimiert eine mit LOCATE FOR erstellte Abfrage, sofern es sich bei lExpression1 um einen optimierbaren Ausdruck handelt. Die beste Leistung erreichen Sie, indem Sie in der FOR-Klausel einen optimierbaren Ausdruck verwenden.

    Weitere Informationen finden Sie unter SET OPTIMIZE und Verwenden von Rushmore zum Beschleunigen des Datenzugriffs.

  • Scope
    Definiert einen Bereich von Datensätzen, der durchsucht werden soll. Es werden nur die in diesen Bereich fallenden Datensätze durchsucht. Die Bereichsklauseln sind: ALL, NEXT nRecords, RECORD nRecordNumber und REST. Befehle, bei denen ein Geltungsbereich (Scope) enthalten ist, funktionieren nur für die Tabelle des aktiven Arbeitsbereichs.

    Der Standardgeltungsbereich für LOCATE ist ALL und umfasst alle Datensätze.

  • WHILE lExpression2
    Bezeichnet eine Bedingung, nach der so lange Datensätze gedruckt werden, wie die Auswertung des logischen Ausdrucks lExpression2 Wahr (.T.) ergibt.

  • NOOPTIMIZE
    Deaktiviert die Rushmore-Optimierung für LOCATE.

    Weitere Informationen finden Sie unter SET OPTIMIZE und Verwenden von Rushmore zum Beschleunigen des Datenzugriffs.

Hinweise

Die Tabelle braucht nicht indiziert zu sein.

Wird der LOCATE-Befehl ohne den FOR-Ausdruck verwendet, setzt Visual FoxPro den Datensatzzeiger auf den ersten logischen Datensatz. Dieses Verfahren ist schneller als die Verwendung von GO TOP, wenn ein Filter verwendet wird oder DELETED auf ON eingestellt ist.

Findet LOCATE einen passenden Datensatz, kann mit RECNO( ) die Nummer des passenden Satzes zurückgegeben werden. Wird ein passender Datensatz gefunden, gibt FOUND( ) Wahr (.T.) und EOF( ) Falsch (.F.) zurück. Ist SET TALK auf ON eingestellt, wird die Satznummer des passenden Datensatzes angezeigt.

Nachdem LOCATE einen passenden Datensatz gefunden hat, können Sie mit CONTINUE im Rest der Tabelle nach weiteren passenden Sätzen suchen. Beim Ausführen von CONTINUE wird die Suche bei dem Datensatz wieder aufgenommen, der unmittelbar auf den passenden Datensatz folgt. Sie können CONTINUE so oft wiederholen, bis das Ende des Geltungsbereichs oder der Tabelle erreicht ist.

Wird kein übereinstimmender Satz gefunden, gibt RECNO( ) die Anzahl der Datensätze in der Tabelle plus 1 zurück, FOUND( ) gibt Falsch (.F.) und EOF( ) Wahr (.T.) zurück.

LOCATE und CONTINUE beziehen sich auf den aktuellen Arbeitsbereich. Wird zwischenzeitlich ein anderer Arbeitsbereich ausgewählt, kann der ursprüngliche Suchvorgang nach der Rückkehr zum ursprünglichen Arbeitsbereich fortgesetzt werden.

Beispiel

Im folgenden Beispiel werden alle Kunden aus Deutschland gesucht. Die Gesamtzahl wird anschließend angezeigt.

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer  && Open Customer table
SET TALK OFF

STORE 0 TO gnCount
LOCATE FOR ALLTRIM(UPPER(customer.country)) = 'GERMANY' 
DO WHILE FOUND( )
   gnCount = gnCount + 1
   ? company
   CONTINUE
ENDDO

? 'Total companies Germany: '+ LTRIM(STR(gnCount))

Siehe auch

CONTINUE | EOF( ) | FIND | FOUND( ) | INDEXSEEK( ) | RECNO( ) | SEEK | SEEK( ) | SET OPTIMIZE