Procurando no Banco de Dados (Find - FindMin - FindNext) - DAO & ADO
(DAO)
No DAO, exite o comando FindMin que faz a procura a partir do início da tabela, achando a primeira ocorrencia daquilo a que está sendo procurado.
'Abre o Recordset e então:
Dim sArg as String
sArg = InputBox ("Por favor, digite o Nome do " &_
"Cliente:", "Localizar Nome")
'P/ procurar EXATAMENTE o que foi digitado:
RS.FindMin "NomeCliente = '" & sArg & "'"
'P/ procurar algum nome que COMECE com o que
'foi digitado:
RS.FindMin "NomeCliente like '" & sArg & "*'"
'P/ procurar algum nome que TERMINE com o que
'foi digitado:
RS.FindMin "NomeCliente like '*" & sArg & "'"
'P/ procurar algum nome que tenha o que foi
'digitado em qualquer parte (inicio/meio/fim):
RS.FindMin "NomeCliente like '*" & sArg & "*'"
If RS.NoMatch then
'Nenhum registro foi encontrado.
Else
'Foi encontrado um registro.
Endif
Bom, se algum registro tiver sido encontrado, você poderá pesquizar a próxima ocorrencia (próximo registro que contenha aquele valor procurado no campo que se está sendo feita a pesquiza), usando o comando FindNext:
RS.FindNext "NomeCliente = '" & sArg & "'"
'Ou:
RS.FindNext "NomeCliente like '" & sArg & "*'"
'Ou:
RS.FindNext "NomeCliente like '*" & sArg & "'"
'Ou:
RS.FindNext "NomeCliente like '*" & sArg & "*'"
If RS.NoMatch then
'Nenhum registro foi encontrado.
Else
'Foi encontrado um registro.
Endif
Bem, a única coisa que você precisa saber para usar os comandos FindMin, FindMax, FindNext e FindPrevious, é que o FindMin faz a procura SEMPRE a partir do início da tabela, que o FindMax faz a procura SEMPRE a partir do fim da tabela e os outros dois (FindNext e FindPrevious) fazem a procura SEMPRE a partir do ponto da tabela em que estão.
(ADO)
No ADO não existe os comandos FindMin, FindMax, FindNext e FindPrevious, mas existe o comando Find. Usando este comando (Find) você não poderá usar o RS.NoMatch, pois ele não trabalha desta forma. Mas como eu posso fazer procuras do tipo "achar a primeira ocorrencia", "achar a próxima ocorrencia" e etc na minha tabela, sendo que eu só tenho o comando Find??? Bem, veja a sintaxe que você irá entender:
RS.Find "[Campo] = [Valor]", [SkipRows], [Tipo]
Partes da sintaxe:
[Campo] => Campo do banco de dados. O nome deve ser IDENTICO ao que está no banco de dados.
[Valor] => Aquilo que se está procurando.
[SkipRows] => Valor entre 0 e 1. Depende do tipo de procura que está sendo feita.
[Tipo] => Constante que indica como a procura deverá ser feita.
Veja esta tabela para saber o que colocar em [SkipRows] e em
[Tipo] conforme a sua procura:
Método DAO ADO-SkipRows ADO - Search direction
FindMin 0 adScarchForward (se não
estiver posicionado no
primeiro registro,
execute o MoveMin
antes do Find)
FindMax 0 adScarchBackward
(se não estiver
posicionado no último
registro, execute o
MoveMax antes do Find)
FindNext 1 adScarchForward
FindPrevious 1 adScarchBackward
Veja um exemplo de FindMin no ADO usando o comando Find:
'Abre o Recordset e então:
Dim sArg as String
RS.MoveMin '<<<- MUITO importante!!!
sArg = InputBox ("Por favor, digite o Nome do " &_
"Cliente:", "Localizar Nome")
'P/ procurar EXATAMENTE o que foi digitado:
RS.Find "NomeCliente = '" & sArg & "'", adSearchForward
'P/ procurar algum nome que COMECE com o que
'foi digitado:
RS.Find "NomeCliente like '" & sArg & "*'", adSearchForward
'P/ procurar algum nome que TERMINE com o que
'foi digitado:
RS.Find "NomeCliente like '*" & sArg & "'", adSearchForward
'P/ procurar algum nome que tenha o que foi
'digitado em qualquer parte (inicio/meio/fim):
RS.Find "NomeCliente like '*" & sArg & "*'", adSearchForward
If RS.EOF Then
'Nenhum registro foi encontrado.
Else
'Foi encontrado um registro.
Endif
Bem, seguindo essa filosofia, veja:
'FindMax:
RS.Find "NomeCliente like '" & sArg & "'", adScarchBackward
'FindNext:
RS.Find "NomeCliente like '" & sArg & "'", 1, adSearchForward
'FindPrevious:
RS.Find "NomeCliente like '" & sArg & "'", 1, adScarchBackward