Buscar un registro en un objeto Recordset de DAO dinámico o tipo instantánea

Puede usar los métodos Find para buscar un registro en un objeto Recordset de tipo dynaset o snapshot. DAO proporciona los siguientes métodos Find:

  • El método FindFirst busca el primer registro que cumple los criterios especificados.

  • El método FindLast busca el último registro que cumple los criterios especificados.

  • El método FindNext busca el siguiente registro que cumpla los criterios especificados.

  • El método FindPrevious busca el registro anterior que cumple los criterios especificados.

Cuando utilice los métodos Find, debe especificar el criterio de búsqueda, que normalmente es una expresión que hace coincidir un nombre de campo con un valor específico.

Puede localizar los registros coincidentes en orden inverso buscando el último con el método FindLast y, a continuación, utilizando el método FindPrevious en lugar del método FindNext.

DAO establece la propiedad NoMatch en True cuando se produce un error en un método Find y la posición del registro actual no está definida. Es posible que exista un registro actual, pero no hay modo de saber cuál es. Para volver al registro actual anterior después de un método Find con error, use un marcador.

La propiedad NoMatch es False cuando la operación se realiza correctamente. En este caso, la posición del registro actual es el registro encontrado por uno de los métodos Find.

El ejemplo siguiente ilustra cómo se puede utilizar el método FindNext para buscar todos los pedidos de la tabla Orders (Pedidos) que no tengan ningún registro correspondiente en la tabla Order Details (Detalles de pedidos). La función busca pedidos que faltan, y si encuentra uno, agrega el valor del campo OrderID a la matriz aryOrders().

Function FindOrders() As Variant 
 
Dim dbsNorthwind As DAO.Database 
Dim rstOrders As DAO.Recordset 
Dim rstOrderDetails As DAO.Recordset 
Dim strSQL As String 
Dim intIndex As Integer 
Dim aryOrders() As Long 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
 
   ' Open recordsets on the Orders and OrderDetails tables. If there are 
   ' no records in either table, exit the function. 
   strSQL = "SELECT * FROM Orders ORDER BY OrderID" 
   Set rstOrders = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot) 
   If rstOrders.EOF Then Exit Function 
 
   strSQL = "SELECT * FROM [Order Details] ORDER BY OrderID" 
   Set rstOrderDetails = dbsNorthwind.OpenRecordset(strSQL, _ 
                         dbOpenSnapshot) 
 
   ' For the first record in Orders, find the first matching record 
   ' in OrderDetails. If no match, redimension the array of order IDs and 
   ' add the order ID to the array. 
   intIndex = 1 
   rstOrderDetails.FindFirst "OrderID = " & rstOrders![OrderID] 
   If rstOrderDetails.NoMatch Then 
      ReDim Preserve aryOrders (1 To intIndex) 
      aryOrders (intIndex) = rstOrders![OrderID] 
      rstOrders.MoveNext 
   End If 
 
   ' The first match has already been found, so use the FindNext method to 
   ' find the next record that satisfies the criteria. 
   Do Until rstOrders.EOF 
      rstOrderDetails.FindNext "OrderID = " & rstOrders![OrderID] 
      If rstOrderDetails.NoMatch Then 
         intIndex = intIndex + 1 
         ReDim Preserve aryOrders (1 To intIndex) 
         aryOrders (intIndex) = rstOrders![OrderID] 
      End If 
      rstOrders.MoveNext 
   Loop 
 
   FindOrders = aryOrders 
 
   rstOrders.Close 
   rstOrderDetails.Close 
   dbsNorthwind.Close 
 
   Set rstOrders = Nothing 
   Set rstOrderDetails = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

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.