_DBSeek( ) (Rutina de biblioteca API)

Busca en una tabla indizada del área de trabajo actual el primer registro cuya clave de índice coincida con el valor val.

long _DBSeek(Value FAR *val)
Value FAR *val;            /* Sought value. */

Observaciones

Si _DBSeek( ) encuentra un registro coincidente, mueve el puntero de registro al registro coincidente y devuelve el número de registro. La coincidencia debe ser exacta a menos que SET EXACT esté establecido en OFF. Si _DBSeek( ) no encuentra un registro coincidente, devuelve 0. Si no hay coincidencia y SET NEAR está establecido en ON, el puntero de registro se coloca inmediatamente después del registro más similar. Si SET NEAR está establecido en OFF, el puntero de registro se coloca al final del archivo.

Si el registro coincidente es un registro almacenado en búfer agregado que no se ha confirmado, el valor devuelto por _DBSeek( ) será distinto del valor devuelto por RECNO( ). RECNO( ) devuelve un valor negativo que indica que el registro está almacenado en búfer. El valor devuelto por _DBSeek( ) es mayor que el número de registros de la tabla más el número de registros almacenados en búfer antes que el registro coincidente.

Si se produce un error, _DBSeek( ) devuelve un número entero negativo cuyo valor absoluto es un número de error de Visual FoxPro.

Cuando busca un campo numérico, val debe estar configurado como ev_type 'N', incluso si el campo no tiene dígitos decimales. Si val tiene un ev_type como 'I', _DBSeek( ) devolverá el error interno número -302, "No coinciden los tipos de datos".

Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.

Ejemplo

El siguiente ejemplo proporciona una búsqueda sobre cualquier índice que controle el orden de una tabla abierta en el área de trabajo actual. Observe que es necesario "?" en la estructura FoxInfo debido a que el tipo de la expresión de índice se desconoce.

Código Visual FoxPro

SET LIBRARY TO DBSEEK  
DO CreateTest

INDEX ON ABC TAG ABC
SET ORDER TO TAG ABC
= DBSEEK("This is record 3")  && seeks ABC = "This is record 3"
LIST NEXT 1
USE

PROCEDURE CreateTest
   CREATE TABLE test (ABC C(20))
   APPEND BLANK
   REPLACE ABC WITH "This is record 1"
   APPEND BLANK
   REPLACE ABC WITH "This is record 2"
   APPEND BLANK
   REPLACE ABC WITH "This is record 3"
   APPEND BLANK
   REPLACE ABC WITH "This is record 4"
   GO TOP
RETURN

Código C

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)
{
   _DBSeek(&parm->p[0].val);
}

FoxInfo myFoxInfo[] = {
   {"DBSEEK", (FPFI) Example, 1, "?"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Vea también

_DBRecCount( ) (Rutina de biblioteca API) | _DBRecNo( ) (Rutina de biblioteca API) | _DBSkip( ) (Rutina de biblioteca API) | SET EXACT (Comando)