LOCALIZAR COM DAO
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
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
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!
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!
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+
Tópico encerrado , respostas não são mais permitidas