Método Recordset.FindFirst (DAO)

Se aplica a: Access 2013, Office 2013

Busca el primer registro de un objeto Recordset de tipo conjunto de registros dinámicos o de tipo instantánea que cumpla los criterios especificados, y convierte ese registro en el registro actual (solo áreas de trabajo de Microsoft Access).

Sintaxis

expresión . FindFirst(Criteria)

expression Variable que representa un objeto Recordset.

Parameters

Nombre

Obligatorio/opcional

Tipo de datos

Descripción

Criterios

Necesario

String

Cadena que se utiliza para localizar el registro. Es como una cláusula WHERE en una instrucción SQL pero sin la palabra WHERE.

Comentarios

Si desea incluir todos los registros en la búsqueda (no solo los que cumplen una condición específica), use los métodos Move para desplazarse de un registro a otro. Para localizar un registro en un objeto Recordset de tipo tabla, use el método Seek.

Si no se encuentra ningún registro que coincida con los criterios, el puntero del registro actual será desconocido y la propiedad NoMatch se configurará como True. Si el conjunto de registros contiene varios registros que cumplen los criterios, FindFirst buscará el primero, FindNext buscará el segundo y así sucesivamente.

Cada método Find empieza a buscar a partir de la ubicación y en la dirección que se especifican en la tabla siguiente.

Método Find

Empieza la búsqueda en

Dirección de búsqueda

FindFirst

Principio del conjunto de registros

Final del conjunto de registros

FindLast

Final del conjunto de registros

Principio del conjunto de registros

FindNext

Registro actual

Final del conjunto de registros

FindPrevious

Registro actual

Principio del conjunto de registros

No obstante, el uso de uno de los métodos Find no es igual a utilizar el método Move, que activa simplemente el registro primero, último, siguiente o anterior sin especificar una condición. Puede proseguir una operación Find con una operación Move.

Compruebe siempre el valor de la propiedad NoMatch para determinar si la operación Find se ha realizado correctamente. Si la búsqueda es correcta, NoMatch es False. Si se produce un error, NoMatch es True y el registro activo no está definido. En este caso, debe colocar de nuevo el puntero de registros activo en un registro válido.

Usar los métodos Find con conjuntos de registros a los que se accede por ODBC con conexión a un motor de base de datos de Microsoft Access puede resultar ineficiente. Tal vez observe que resulta más rápido reformular los criterios para buscar un determinado registro, especialmente al trabajar con conjuntos de registros de gran tamaño.

Al trabajar con grandes objetos Recordset de tipo conjunto de registros dinámicos y bases de datos ODBC conectadas a un motor de base de datos de Microsoft Access, puede que compruebe que usar los métodos Find o las propiedades Sort o Filter resulta lento. Para mejorar el rendimiento, use las consultas SQL con cláusulas ORDER BY o WHERE personalizadas, consultas de parámetros u objetos QueryDef que recuperan registros indizados específicos.

Debe usar el formato de fecha de EE. UU. (mes-día-año) al buscar campos que contengan fechas, incluso si no usa la versión estadounidense del motor de base de datos de Microsoft Access; De lo contrario, es posible que no se encuentren los datos. Use la función Formato de Visual Basic para convertir la fecha. Por ejemplo:

    rstEmployees.FindFirst "HireDate > #" _ 
        & Format(mydate, 'm-d-yy' ) & "#" 

Si criteria está compuesto por una cadena concatenada con un valor de tipo no entero y los parámetros del sistema especifican un carácter decimal que no es de EE.UU. como una coma (por ejemplo, strSQL = "PRICE > " & lngPrice, and lngPrice = 125,50), se produce un error cuando intenta llamar al método. Esto se produce porque durante la concatenación, el número se convertirá en una cadena utilizando el carácter decimal predeterminado de su sistema y Microsoft Access SQL sólo acepta caracteres decimales con el formato estándar de Estados Unidos.

Nota:

Para obtener el mejor rendimiento, los criterios deben tener la forma "campo = valor" donde campo es un campo indexado de la tabla base subyacente, o "campo LIKE prefijo" donde campo es un campo indexado de la tabla base subyacente y prefijo es una cadena de búsqueda de prefijo (por ejemplo, "ART*" ).

En general, para tipos de búsquedas equivalentes, el método Seek proporciona un mejor rendimiento que los métodos Find. Esto supone que los objetos Recordset de tipo tabla por sí mismos pueden satisfacer sus necesidades.

Ejemplo

En el siguiente ejemplo, se muestra cómo usar los métodos FindFirst y FindNext para buscar un registro en un Recordset.

Código de ejemplo proporcionado por la Referencia del programador de Microsoft Access 2010.

    Sub FindOrgName()
    
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        
        'Get the database and Recordset
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("tblCustomers")
    
        'Search for the first matching record   
        rst.FindFirst "[OrgName] LIKE '*parts*'"
        
        'Check the result
        If rst.NoMatch Then
            MsgBox "Record not found."
            GotTo Cleanup
        Else
            Do While Not rst.NoMatch
                MsgBox "Customer name: " & rst!CustName
                rst.FindNext "[OrgName] LIKE '*parts*'"
            Loop
    
            'Search for the next matching record
            rst.FindNext "[OrgName] LIKE '*parts*'"
        End If
       
        Cleanup:
            rst.Close
            Set rst = Nothing
            Set dbs = Nothing
    
    End Sub