Localizar um registro em um Conjunto de Registros de DAO do tipo tabela

Você usa o método Seek para localizar um registro em um objeto Recordset do tipo tabela.

Quando você usa o método Seek para localizar um registro, o mecanismo de banco de dados do Access usa o índice atual da tabela, conforme definido pela propriedade Index.

Observação

Se você usar o método Seek em um objeto Recordset do tipo tabela sem antes definir o índice atual, ocorrerá um erro de tempo de execução.

O exemplo a seguir abre um objeto Recordset do tipo tabela denominado Employees e usa o método Seek para localizar o registro que contém um valor de lngEmpID no campo EmployeeID. Ele retorna a data de contratação do funcionário 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

O método Seek sempre começa pesquisando registros no início do objeto Recordset. Se você usar o método Seek com os mesmos argumentos mais de uma vez no mesmo Recordset, ele localizará o mesmo registro.

Use a propriedade NoMatch no objeto Recordset para testar se um registro que corresponde aos critérios de pesquisa foi encontrado. Se o registro que corresponde aos critérios for encontrado, a propriedade NoMatch será False; caso contrário, será True.

O exemplo de código a seguir mostra como você pode criar uma função que usa o método Seek para localizar um registro usando um índice de campo múltiplo.

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

Neste exemplo, chave primária da tabela consiste em dois campos: OrderID e ProductID. Ao chamar a função GetFirstPrice usando uma combinação (existente) válida dos valores de campo OrderID e ProductID, a função retorna o preço unitário do registro encontrado. Se não for possível encontrar a combinação desejada de valores de campo na tabela, a função retorna o valor Null.

Se o índice atual for um índice de campos múltiplos, os valores da chave à direita podem ser omitidos e são tratados como valores Null. Ou seja, você pode deixar de fora qualquer número de valores de chave do final de um método Seek do argumento key, mas não do início ou do meio. No entanto, se você não especificar todos os valores no índice, poderá usar apenas a cadeia de comparação ">" ou "<" com o método Seek .

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.