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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de