Buscar un registro en un objeto Recordset de DAO tipo tabla

Use el método Seek para buscar un registro en un objeto Recordset de tipo tabla.

Cuando se usa el método Seek para buscar un registro, el motor de base de datos de Access usa el índice actual de la tabla, tal como se define en la propiedad Index .

Nota:

Si utiliza el método Seek en un objeto Recordset de tipo tabla sin establecer primero el índice actual, se producirá un error en tiempo de ejecución.

En el ejemplo siguiente se abre un objeto Recordset de tipo tabla denominado Employees y se usa el método Seek para buscar el registro que contiene un valor de lngEmpID en el campo EmployeeID. Devuelve la fecha de contratación del empleado especificado.

Function GetHireDate(lngEmpID As Long) As Variant 
 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployees As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDB 
   Set rstEmployees = dbsNorthwind.OpenRecordset("Employees") 
 
   ' The index name for Employee ID. 
   rstEmployees.Index = "PrimaryKey" 
   rstEmployees.Seek "=", lngEmpID 
 
   If rstEmployees.NoMatch Then 
      GetHireDate = Null 
   Else 
      GetHireDate = rstEmployees!HireDate 
   End If 
 
   rstEmployees.Close 
   dbsNorthwind.Close 
 
   Set rstEmployees = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

El método Seek siempre comienza la búsqueda de registros por el principio del objeto Recordset. Si utiliza el método Seek con los mismos argumentos varias veces en el mismo Recordset, dicho método buscará el mismo registro.

Use la propiedad NoMatch en el objeto Recordset para comprobar si se encontró un registro que coincida con los criterios de búsqueda. Si se encontró el registro que coincide con los criterios, la propiedad NoMatch será False; De lo contrario, será True.

El ejemplo de código siguiente muestra cómo crear una función que use el método Seek para buscar un registro mediante un índice de varios campos:

Function GetFirstPrice(lngOrderID As Long, lngProductID As Long) As Variant 
 
Dim dbsNorthwind As DAO.Database 
Dim rstOrderDetail As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
   Set rstOrderDetail = dbsNorthwind.OpenRecordset("Order Details") 
 
   rstOrderDetail.Index = "PrimaryKey" 
   rstOrderDetail.Seek "=", lngOrderID, lngProductID 
 
   If rstOrderDetail.NoMatch Then 
      GetFirstPrice = Null 
   Else 
      GetFirstPrice = rstOrderDetail!UnitPrice 
   End If 
 
   rstOrderDetail.Close 
   dbsNorthwind.Close 
 
   Set rstOrderDetail = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

En este ejemplo, la clave principal de la tabla está compuesta por dos campos: OrderID (IdDePedido) y ProductID (IdProducto). Cuando se llama a la función GetFirstPrice con una combinación válida (existente) de los valores de dichos campos, dicha función devuelve el precio por unidad del registro encontrado. Si no puede encontrar la combinación de valores de los campos que desea en la tabla, la función devolverá el valor Null.

Si el índice actual es un índice de varios campos, es posible omitir los valores de las claves finales y tratarlos como valores Null. Es decir, puede omitir cualquier número de valores de claves desde el final del argumento key de un método Seek, pero no desde el principio o desde el centro. Sin embargo, si no especifica todos los valores del índice, solo puede usar la cadena de comparación ">" o "<" con el método Seek .

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.