LOCALIZAR COM DAO

JAIPERMEN 28/03/2005 12:21:08
#75314
Caros companheiros Programadores,
Estou com um pequeno probleminha para movimentação entre os dados de um banco de dados ACCESS após a localização de um determinado dado. Uso a DAO para conexão com BD.

O que acontece é o seguinte. Tenho uma tabela chamada Clientes. Uso um inputbox ou qualquer ou meio para localizar um registro x (por exep. o registro 15 numa tabela de 50 registros). O meu recordset principal (tbClientes) está me mostrando atualmente o registro 2. Quando localizo o registro de numero 15 com um outro recordset (exep. ProcClientes) e mostro os dados retornados, meu recordset principal que uso para percorrer entre os dados continua no registro 2. Quando uso o metodo <tbClientes.MoveNext> retornase o registro de numero 3 e não o próximo registro do então localizado pelo recordset ProcClientes.

Tentei usar bookmarks para realizar o serviço e posicionar o recordset principal neste recordset de localização mas não consegui.
Se alguém tiver uma sugestão de como posso fazer isso, ou seja, focalizar meu recordset principal <tbClientes> no mesmo lugar do recordset <ProcClientes>.

O Código segue abaixo:
-------------------------------------------------------------------
Dim db As Database
Dim ws As Workspace
Dim tbClientes As Recordset
Dim marcador As Variant, marcador1 As Variant

-------------------------------------------------------------------
Private Sub Mostra_Dados()
txt1.Text = tbClientes!id
txt2.Text = tbClientes!nome
txt3.Text = tbClientes!cep
End Sub
-------------------------------------------------------------------
Private Sub cmdAnterior_Click()
tbClientes.MovePrevious
Call Mostra_Dados
End Sub
-------------------------------------------------------------------
Private Sub cmdLocalizar_Click()
Dim codigo As Integer
Dim sql As String
Dim ProcClientes As Recordset


codigo = InputBox("Digite o codigo do Cliente:")
sql = "SELECT * FROM Clientes WHERE id=" & codigo

Set ProcClientes = db.OpenRecordset(sql, dbOpenDynaset)
With ProcClientes
txt1.Text = !id
txt2.Text = !nome
txt3.Text = !cep
End With

Set ProcClientes = Nothing
End Sub
-------------------------------------------------------------------
Private Sub cmdPrimeiro_Click()
tbClientes.MoveFirst
Call Mostra_Dados
End Sub
-------------------------------------------------------------------
Private Sub cmdProximo_Click()
tbClientes.MoveNext
Call Mostra_Dados
End Sub
-------------------------------------------------------------------
Private Sub cmdUltimo_Click()
tbClientes.MoveLast
Call Mostra_Dados
End Sub
-------------------------------------------------------------------
Private Sub Form_Load()

Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\db.mdb", False, False)

Set tbClientes = db.OpenRecordset("Clientes", dbOpenTable)
tbClientes.Index = "id"

Call Mostra_Dados
End Sub


Desde já agradeço pelas sugestões prestadas.

Um abraço a todos
RO.DRIGOSG 28/03/2005 12:33:05
#75317
Resposta escolhida
Tente usar isto:

Dim strNome As String

With rs

strNome = Trim(InputBox("Informe o nome da empresa", "Localizar por nome"))
If strNome = "" Then Exit Sub
' AbsolutionPosition: Sabe onde esta posicionado o ponteiro (Registro)
CmdAcao(4).Tag = .AbsolutePosition
' Tag: Guarda valores
' FindFirst : Pesquisas
' Like: Parecido (Procura palavras parecidas)

.FindFirst "Companyname like '" & strNome & "*'" ' *: Serve para fazer procuras, igual quando se faz uma pesquisa (ex: *.exe)
' NoMatch: Sem correspondência, serve para as pesquisas(Se não encontrar a pesquisa)
If .NoMatch Then
.AbsolutePosition = CmdAcao(4).Tag
MsgBox "Nome não Localizado", vbInformation, "Aviso"
End If
End With

Falou!
Um abraço!
JAIPERMEN 30/03/2005 18:15:11
#75885
Obrigado pela dica. Não era exatamente o que eu queria mas me serviu muito. Consegui com isso posicionar o cursor no lugar desejado. Novamente obrigado pela sua disposição em postar a resposta.

T+
Tópico encerrado , respostas não são mais permitidas