NAVEGAR ENTRE REGISTROS
Boa tarde amigos.
Gostaria de criar dois botões para navegação entre registros da minha base de dados. Os dados são exibidos em um formulário e um grid. Estou utilizando ADO.
Alguém, tem alguma dica para passar?
Abraços
Gostaria de criar dois botões para navegação entre registros da minha base de dados. Os dados são exibidos em um formulário e um grid. Estou utilizando ADO.
Alguém, tem alguma dica para passar?
Abraços
Você pode usar o próprio select desde que exiba o código em um campo.
exemplo:
anterior
[Ô]SELECT MAX(id) FROM tabela Where id < [Ô] & txtcod
proximo
[Ô]SELECT MAX(id) FROM tabela Where id > [Ô] & txtcod
ultimo
[Ô]SELECT MAX(id) FROM tabela[Ô]
primeiro
[Ô]SELECT MIN(id) FROM tabela[Ô]
exemplo:
anterior
[Ô]SELECT MAX(id) FROM tabela Where id < [Ô] & txtcod
proximo
[Ô]SELECT MAX(id) FROM tabela Where id > [Ô] & txtcod
ultimo
[Ô]SELECT MAX(id) FROM tabela[Ô]
primeiro
[Ô]SELECT MIN(id) FROM tabela[Ô]
Não existe algum componente que faça isto?
Desta maneira é apenas selecionado o último código ou o primeiro, tanto faz, ele não traz todos os dados que preciso.
Como posso fazer?
Como posso fazer?
[txt-color=#e80000]Do jeito que peguei na época.[/txt-color]
TÃtulo da Dica: Conexão ADO um pouco mais profissional e usando Command
Postada em 22/4/2003 por ®ogerVB
--------------------------------------------------------------------------------
Neste exemplo de conexão estou usando o ADO 2.7, e 3 TextBox, com os nomes TxtCodigo, TxtNome e TxtObs, e 4 CommandButton com os nome CmdPrimeiro, CmdAnterior, CmdProximo e CmdUltimo para a movimentação no banco! Depois de adicionado esse objetos pode e a referencia pode copiar o seguinte código:
Public Conexao As ADODB.Connection
Private RsTabela As ADODB.Recordset
Private Cmd As ADODB.Command
_______________________________________________________________________
Private Sub Atualizar()
TxtCodigo.Text = RsTabela([Ô]codigo[Ô])
TxtNome.Text = RsTabela([Ô]nome[Ô])
TxtObs.Text = RsTabela([Ô]obs[Ô])
End Sub
_______________________________________________________________________
Private Sub CmdAnterior_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select max(codigo) from tabela where codigo < ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdPrimeiro_Click()
Set RsTabela = New ADODB.Recordset
RsTabela.Open [Ô]Select * From Tabela where codigo=(select min(codigo) from tabela)[Ô], Conexao, adOpenDynamic
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdProximo_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select min(codigo) from tabela where codigo > ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdUltimo_Click()
Set RsTabela = New ADODB.Recordset
RsTabela.ActiveConnection = Conexao
RsTabela.CursorLocation = adUseClient
RsTabela.CursorType = adOpenDynamic
RsTabela.Open [Ô]Select * From Tabela where codigo=(select max(codigo) from tabela)[Ô]
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________
Private Sub Form_Load()
[ô]abre banco
Set Conexao = New ADODB.Connection
Conexao.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source= [Ô] & App.Path & [Ô]\banco.mdb[Ô]
Frame1.Enabled = False
CmdPrimeiro_Click
End Sub
TÃtulo da Dica: Conexão ADO um pouco mais profissional e usando Command
Postada em 22/4/2003 por ®ogerVB
--------------------------------------------------------------------------------
Neste exemplo de conexão estou usando o ADO 2.7, e 3 TextBox, com os nomes TxtCodigo, TxtNome e TxtObs, e 4 CommandButton com os nome CmdPrimeiro, CmdAnterior, CmdProximo e CmdUltimo para a movimentação no banco! Depois de adicionado esse objetos pode e a referencia pode copiar o seguinte código:
Public Conexao As ADODB.Connection
Private RsTabela As ADODB.Recordset
Private Cmd As ADODB.Command
_______________________________________________________________________
Private Sub Atualizar()
TxtCodigo.Text = RsTabela([Ô]codigo[Ô])
TxtNome.Text = RsTabela([Ô]nome[Ô])
TxtObs.Text = RsTabela([Ô]obs[Ô])
End Sub
_______________________________________________________________________
Private Sub CmdAnterior_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select max(codigo) from tabela where codigo < ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdPrimeiro_Click()
Set RsTabela = New ADODB.Recordset
RsTabela.Open [Ô]Select * From Tabela where codigo=(select min(codigo) from tabela)[Ô], Conexao, adOpenDynamic
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdProximo_Click()
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conexao
Cmd.CommandType = adCmdText
Cmd.CommandText = [Ô]select * from tabela where codigo=(select min(codigo) from tabela where codigo > ?)[Ô]
Cmd.Parameters(0).Value = TxtCodigo.Text
Set RsTabela = Cmd.Execute
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
Set Cmd = Nothing
End Sub
_______________________________________________________________________
Private Sub CmdUltimo_Click()
Set RsTabela = New ADODB.Recordset
RsTabela.ActiveConnection = Conexao
RsTabela.CursorLocation = adUseClient
RsTabela.CursorType = adOpenDynamic
RsTabela.Open [Ô]Select * From Tabela where codigo=(select max(codigo) from tabela)[Ô]
If Not RsTabela.EOF Then
Atualizar
End If
RsTabela.Close
Set RsTabela = Nothing
End Sub
_______________________________________________________________________
Private Sub Form_Load()
[ô]abre banco
Set Conexao = New ADODB.Connection
Conexao.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source= [Ô] & App.Path & [Ô]\banco.mdb[Ô]
Frame1.Enabled = False
CmdPrimeiro_Click
End Sub
como eu disse ele acaba trazendo sim desde que vc se baseie em um codigo que é exibido no textbox
tem como vc postar seu código, ou o código qe tentou usar.
tem como vc postar seu código, ou o código qe tentou usar.
Marcelo olhe o código abaixo:
[ô] Navega para o primeiro registro da tabela
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MIN(controle) FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
[ô] Verifica qual o estado da nota e exibe no lblStatus
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]B[Ô] Then
lblStatus.Caption = [Ô]Nota Baixada[Ô]
End If
[ô] Verfica se estado atual da nota está removido
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]R[Ô] Then
lblStatus.Caption = [Ô]Nota Removida[Ô]
End If
[ô] Verifica se estado atual da nota está aberto
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]A[Ô] Then
lblStatus.Caption = [Ô]Nota Aberta[Ô]
End If
[ô] Se retornar tabela vazia avisa o usuário e sai da função.
If oRecCadC.EOF = True Then
MsgBox [Ô]Não foi possÃvel encontrar registros de compras anteriores, realize uma entrada.[Ô]
Exit Sub
End If
txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])
txtCodFornecedor.Text = oRecCadC.Fields([Ô]codfornecedor[Ô])
cboFornecedores.Text = oRecCadC.Fields([Ô]nome[Ô])
txtNumNota = oRecCadC.Fields([Ô]numnota[Ô])
txtDescricao.Text = oRecCadC.Fields([Ô]descricao[Ô])
txtAcrescimo.Text = oRecCadC.Fields([Ô]acrescimos[Ô])
txtDesconto.Text = oRecCadC.Fields([Ô]desconto[Ô])
txtBCICMS.Text = oRecCadC.Fields([Ô]bcicms[Ô])
txtValICMS.Text = oRecCadC.Fields([Ô]valicms[Ô])
txtValTotal.Text = oRecCadC.Fields([Ô]valortotalnota[Ô])
[ô] Até este ponto são carregadas somente a parte principal da nota(Dados principais)
[ô] Chama a função para carregar os itens da nota
Carrega_Equip_Ant
Call fechaObjetoConnection(oConCadC)
Call fechaObjetoRecordset(oRecCadC)
[ô] Navega para o primeiro registro da tabela
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MIN(controle) FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
[ô] Verifica qual o estado da nota e exibe no lblStatus
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]B[Ô] Then
lblStatus.Caption = [Ô]Nota Baixada[Ô]
End If
[ô] Verfica se estado atual da nota está removido
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]R[Ô] Then
lblStatus.Caption = [Ô]Nota Removida[Ô]
End If
[ô] Verifica se estado atual da nota está aberto
If oRecCadC.Fields([Ô]status[Ô]) = [Ô]A[Ô] Then
lblStatus.Caption = [Ô]Nota Aberta[Ô]
End If
[ô] Se retornar tabela vazia avisa o usuário e sai da função.
If oRecCadC.EOF = True Then
MsgBox [Ô]Não foi possÃvel encontrar registros de compras anteriores, realize uma entrada.[Ô]
Exit Sub
End If
txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])
txtCodFornecedor.Text = oRecCadC.Fields([Ô]codfornecedor[Ô])
cboFornecedores.Text = oRecCadC.Fields([Ô]nome[Ô])
txtNumNota = oRecCadC.Fields([Ô]numnota[Ô])
txtDescricao.Text = oRecCadC.Fields([Ô]descricao[Ô])
txtAcrescimo.Text = oRecCadC.Fields([Ô]acrescimos[Ô])
txtDesconto.Text = oRecCadC.Fields([Ô]desconto[Ô])
txtBCICMS.Text = oRecCadC.Fields([Ô]bcicms[Ô])
txtValICMS.Text = oRecCadC.Fields([Ô]valicms[Ô])
txtValTotal.Text = oRecCadC.Fields([Ô]valortotalnota[Ô])
[ô] Até este ponto são carregadas somente a parte principal da nota(Dados principais)
[ô] Chama a função para carregar os itens da nota
Carrega_Equip_Ant
Call fechaObjetoConnection(oConCadC)
Call fechaObjetoRecordset(oRecCadC)
acima vc postou o codigo que carrega o primeiro registro da tabela, quando o código acima é carregado, vc preenche a textbox ( txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])) acredito que seja uma numero sequecial, se for basta fazer o seguinte
crie um botão proximo e cole
txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MAX(controle) FROM ger105 WHERE controle >[Ô] & txtNumControle.Text
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
não sei se vai funcionar mas teoricamente seria isto
crie um botão proximo e cole
txtNumControle.Text = oRecCadC.Fields([Ô]controle[Ô])
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]SELECT MAX(controle) FROM ger105 WHERE controle >[Ô] & txtNumControle.Text
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
não sei se vai funcionar mas teoricamente seria isto
Marcelo da maneira que você postou não funcionou
Fiz assim e deu certo para o Primeiro e para o ùltimo
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]select * FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
oRecCadC.MoveFirst / oRecCadC.MoveLast
Fiz assim e deu certo para o Primeiro e para o ùltimo
Set oConCadC = New ADODB.Connection
oConCadC.ConnectionString = Init.vStrConSQLServer
oConCadC.Open
Set oRecCadC = New ADODB.Recordset
vStrSql = [Ô]select * FROM ger105[Ô]
oRecCadC.Open vStrSql, oConCadC, adOpenDynamic, adLockReadOnly
oRecCadC.MoveFirst / oRecCadC.MoveLast
bom não vou ficar fritando sua cabeça como não uso isso a muito tempo não consigo me lembrar como fazer com ADO mas este tópico acredito que te ajude veja
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=343801
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=343801
Tópico encerrado , respostas não são mais permitidas