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