LOCATE (Comando)

Busca secuencialmente en la tabla el primer registro que coincida con la expresión lógica especificada.

LOCATE [FOR lExpression1]   [Scope]   [WHILE]   [NOOPTIMIZE]
   [IN nWorkArea | cTableAlias]

Parámetros

  • FOR lExpression1
    LOCATE busca secuencialmente en la tabla actual el primer registro que coincida con la expresión lógica lExpression1.

    Rushmore optimizará una consulta creada con LOCATE FOR si lExpression1 es una expresión optimizable. Para obtener el máximo rendimiento, utilice una expresión optimizable en la cláusula FOR.

    Si desea obtener más información, vea SET OPTIMIZE y Usar Rushmore para agilizar el acceso a los datos.

  • Scope
    Especifica el intervalo de objetos que se buscará. Solamente se buscarán los registros incluidos en el intervalo. Las cláusulas de alcance son: ALL, NEXT nRecords, RECORD nRecordNumber y REST. Los comandos que incluyen Scope sólo actúan sobre la tabla del área de trabajo activa.

    El alcance predeterminado de LOCATE es ALL (todos los registros).

  • WHILE lExpression2
    Especifica una condición por la cual se buscan los registros siempre y cuando la expresión lógica lExpression2 dé como resultado verdadero (.T.).

  • NOOPTIMIZE
    Desactiva la optimización Rushmore de LOCATE.

    Si desea obtener más información, vea SET OPTIMIZE y Usar Rushmore para agilizar el acceso a los datos.

Observaciones

No es necesario que la tabla esté indizada.

Si utiliza el comando LOCATE sin la expresión FOR, Visual FoxPro coloca el puntero del registro en el primer registro lógico. Esto es más rápido que utilizar GO TOP cuando se utiliza un filtro o cuando DELETED está establecido a ON.

Si LOCATE encuentra un registro coincidente, podrá utilizar RECNO( ) para devolver el número del registro coincidente. Si se encuentra un registro coincidente, FOUND( ) devolverá verdadero (.T.) y EOF( ) devolverá falso (.F.). Si SET TALK está establecido en ON, se mostrará el número del registro coincidente.

Después de que LOCATE encuentre un registro coincidente, puede ejecutar CONTINUE para buscar registros coincidentes adicionales en el resto de la tabla. Cuando se ejecuta CONTINUE, se reanuda el proceso de búsqueda a partir del registro que sigue inmediatamente al registro coincidente. Puede ejecutar CONTINUE repetidamente hasta llegar al final del alcance o de la tabla.

Si no se encuentra ninguna coincidencia, RECNO( ) devolverá el número de registros de la tabla más uno, FOUND( ) devolverá falso (.F.) y EOF( ) devolverá verdadero (.T.).

LOCATE y CONTINUE son específicos del área de trabajo actual. Si se selecciona otra área de trabajo, el proceso de búsqueda original podrá continuarse cuando se vuelva a seleccionar el área de trabajo original.

Ejemplo

En el ejemplo siguiente se encuentran los registros correspondientes a clientes de Alemania ("Germany"). A continuación se muestra el número total.

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))

Vea también

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