Método Recordset.FindNext (DAO)
Aplica-se a: Access 2013, Office 2013
Localiza o próximo registro em um objeto Recordset tipo dynaset ou instantâneo que atenda a critérios específicos e torne esse registro o registro atual (apenas espaços de trabalho do Microsoft Access ).
Sintaxe
expressão . FindNext(Criteria)
expressão Uma variável que representa um objeto Conjunto de registros.
Parâmetros
Nome |
Necessária/opcional |
Tipo de dados |
Descrição |
---|---|---|---|
Criteria |
Obrigatório |
String |
Uma sequência usada para localizar o registro. Ela é como a cláusula WHERE em uma instrução SQL, mas sem a palavra WHERE. |
Comentários
Se você quiser incluir todos os registros na sua pesquisa não apenas aqueles que correspondem a uma condição específica use os métodos Move para mover de um registro para outro. Para localizar um registro em um Recordset tipo tabela, use o método Seek.
Se a correspondência de critérios do registro não for localizada, o indicador do registro atual será desconhecido e a propriedade Nenhuma correspondência será definida como Verdadeiro. Se o conjunto de registros incluir mais de um registro que satisfaça os critérios, o FindFirst vai localizar a primeira ocorrência, o FindNext vai localizar a próxima ocorrência, e assim por diante.
Todos os métodos Find iniciam suas pesquisas a partir do local e na direção especificada na tabela a seguir.
Método Find |
Inicia pesquisa em |
Direção da pesquisa |
---|---|---|
FindFirst |
Início do conjunto de registros |
Fim do conjunto de registros |
FindLast |
Fim do conjunto de registros |
Início do conjunto de registros |
FindNext |
Registro atual |
Fim do conjunto de registros |
FindPrevious |
Registro atual |
Início do conjunto de registros |
No entanto, utilizar um dos métodos Find não é o mesmo que utilizar um método Move, que simplesmente torna atual o primeiro, o último, o anterior ou o próximo registro sem especificar uma condição. A operação Find pode ser seguida pela operação Move.
Sempre verifique o valor da propriedade NoMatch para determinar se a operação Find foi bem-sucedida. Se a pesquisa for bem-sucedida, NoMatch será False. Se ela falhar, NoMatch será True, e o registro atual não será definido. Nesse caso, você deve posicionar o ponteiro atual do registro de volta em um registro válido.
Utilizar o método Find com os conjuntos de registros com acesso ODBC conectados por mecanismo do banco de dados do Microsoft Access pode não ser eficaz. Você poderá constatar que reformular os critérios para localizar um registro específico seja mais rápido, especialmente quando se trabalha com grandes conjuntos de registros.
Em um espaço de trabalho ODBCDirect, os métodos Find e Seek não estão disponíveis em nenhum tipo de objeto Recordset, porque executar um método Find ou Seek por meio de uma conexão ODBC não é muito eficiente na rede. Em vez disso, você deve projetar a consulta (isto é, utilizando o argumento source para o método OpenRecordset) com uma cláusula WHERE apropriada que restrinja os registros retornados a apenas aqueles que corresponderem aos critérios utilizados em um método Find ou Seek.
Ao trabalhar com bancos de dados ODBC conectados ao mecanismo de banco de dados do Microsoft Access e com grandes objetos v tipo dynaset, você poderá descobrir que a utilização dos métodos Find ou da propriedade Sort ou Filter é lenta. Para aprimorar o desempenho, use as consultas SQL com cláusulas ORDER BY ou WHERE personalizadas, consultas de parâmetro ou objetos QueryDef que recuperam registros específicos e indexados.
Você deve usar o formato de data americano (mês-dia-ano) ao pesquisar campos contendo datas, mesmo que não esteja utilizando uma versão em inglês do mecanismo de banco de dados do Microsoft Access; caso contrário, os dados não poderão ser localizado. Use a função Format do Visual Basic para converter a data. Por exemplo:
rstEmployees.FindFirst "HireDate > #" _
& Format(mydate, 'm-d-yy' ) & "#"
Se o critério for composto por uma cadeia concatenada de caracteres e com um valor não inteiro, e se os parâmetros do sistema especificarem um caractere decimal não-EUA, como uma vírgula (por exemplo, strSQL = "PRICE > " & lngPrice, and lngPrice = 125,50), ocorrerá um erro ao tentar chamar o método. Isso acontecerá porque durante a concatenação, o número será convertido em uma sequência que usa o caractere decimal padrão do sistema e o Microsoft Access SQL aceita somente os caracteres decimais do padrão dos EUA.
Observação
Para melhorar o desempenho, criteria deve estar no formato "field = value", no qual field é um campo indexado na tabela base, ou no formato "field LIKE prefix", no qual field é um campo indexado na tabela base e prefix é uma sequência de pesquisa de prefixo (por exemplo, "ART*").
Em geral, para tipos equivalentes de pesquisa, o método Seek fornece melhor desempenho que os métodos Find. Isso supõe que os objetos de tipo de tabela Conjunto de registros sozinhos podem atender às suas necessidades.
Exemplo
O exemplo a seguir mostra como usar os métodos FindFirst e FindNext para localizar um registro em um Conjunto de Registros.
Código de exemplo fornecido por: a Referência do programador do 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