BOTOES DE NAVEGA?ÃO, ANTERIOR, PRÓXIMO, ULTIMO
Ola Pessoal,
Eu vi que existem alguns tópicos sobre este tema aqui, mas infelizmente não consegui adaptar nenhum deles, então espero que alguém possa me dar uma luz.
Enfim, o botão para mover para o próximo registro eu até consegui, embora eu ache que a rotina ficou muito grande, vi aqui mesmo algumas bem mais enxutas, mas o anterior, último e primeiro com a mesma lógica postada abaixo dá erro. Estou utilizando conexão DAO em banco ACCESS.
Eu vi que existem alguns tópicos sobre este tema aqui, mas infelizmente não consegui adaptar nenhum deles, então espero que alguém possa me dar uma luz.
Enfim, o botão para mover para o próximo registro eu até consegui, embora eu ache que a rotina ficou muito grande, vi aqui mesmo algumas bem mais enxutas, mas o anterior, último e primeiro com a mesma lógica postada abaixo dá erro. Estou utilizando conexão DAO em banco ACCESS.
Sub BNEXT
Dim ComandoSQL As String
ComandoSQL = [Ô]select * from tb_cad[Ô]
Call Conecta
Set consulta = banco.OpenRecordset(ComandoSQL)
With consulta
.MoveNext
txtcod = consulta(1)
txtnome = consulta(2)
txtmae = consulta(3)
txtpai = consulta(4)
txtnasc = consulta(5)
txtRG = consulta(6)
txtCPF = consulta(7)
txtend = consulta(8)
txttel = consulta(9)
txtcel = consulta(10)
txtcracha = consulta(11)
txtparent = consulta(12)
txtsala = consulta(13)
txtandar = consulta(14)
txtpront = consulta(15)
txttipo = consulta(16)
txtobs = consulta(17)
End With
+ ou - assim.
Private Sub CmdPrimeiro_Click()
tb.MoveFirst [ô]vai o primeiro(first) registro na tabela
Call Mostrar_Dados [ô]chama(call) a rotina que mostra os dados
MsgBox [Ô]Este é o Primeiro Registro![Ô], vbInformation, [Ô]Aviso[Ô]
End Sub
Private Sub CmdUltimo_Click()
tb.MoveLast [ô]vai para o ultimo(last) registro na tabela
Call Mostrar_Dados [ô]chama(call) a rotina que mostra os dados
MsgBox [Ô]Este é o Último Registro![Ô], vbInformation, [Ô]Aviso[Ô]
End Sub
Private Sub CmdAnterior_Click()
tb.MovePrevious [ô]vai para o registro anterior (previous) da tabela
If tb.BOF Then [ô]pergunta se chegou no inicio da tabela(BOF)[Ô]BEGIN OF FILE[Ô]
MsgBox [Ô]Este é o primeiro registro![Ô], vbInformation, [Ô]Aviso[Ô] [ô]msgbox dizendo que chegou no inicio da tabela
tb.MoveFirst [ô]fica no primeiro caso tenha chegado no inicio
End If [ô]fecha o if
Call Mostrar_Dados [ô]chama(call) mostra os dados
End Sub
Private Sub CmdProximo_Click()
tb.MoveNext [ô]vai para o proximo(next) registro na tabela
If tb.EOF Then [ô]pergunta se chegou no fim do arquivo(EOF) [Ô]END OF FILE[Ô]
MsgBox [Ô]Não há mais registros![Ô], vbInformation, [Ô]Aviso[Ô] [ô]mostra msgbox avisando que chegou no fim
tb.MoveLast [ô]fica posicionado no ultimo registro
End If [ô]fecha o if
Call Mostrar_Dados [ô]chama (call) a rotina que mostra os dados
End Sub
Private Sub CmdPrimeiro_Click()
tb.MoveFirst [ô]vai o primeiro(first) registro na tabela
Call Mostrar_Dados [ô]chama(call) a rotina que mostra os dados
MsgBox [Ô]Este é o Primeiro Registro![Ô], vbInformation, [Ô]Aviso[Ô]
End Sub
Private Sub CmdUltimo_Click()
tb.MoveLast [ô]vai para o ultimo(last) registro na tabela
Call Mostrar_Dados [ô]chama(call) a rotina que mostra os dados
MsgBox [Ô]Este é o Último Registro![Ô], vbInformation, [Ô]Aviso[Ô]
End Sub
Private Sub CmdAnterior_Click()
tb.MovePrevious [ô]vai para o registro anterior (previous) da tabela
If tb.BOF Then [ô]pergunta se chegou no inicio da tabela(BOF)[Ô]BEGIN OF FILE[Ô]
MsgBox [Ô]Este é o primeiro registro![Ô], vbInformation, [Ô]Aviso[Ô] [ô]msgbox dizendo que chegou no inicio da tabela
tb.MoveFirst [ô]fica no primeiro caso tenha chegado no inicio
End If [ô]fecha o if
Call Mostrar_Dados [ô]chama(call) mostra os dados
End Sub
Private Sub CmdProximo_Click()
tb.MoveNext [ô]vai para o proximo(next) registro na tabela
If tb.EOF Then [ô]pergunta se chegou no fim do arquivo(EOF) [Ô]END OF FILE[Ô]
MsgBox [Ô]Não há mais registros![Ô], vbInformation, [Ô]Aviso[Ô] [ô]mostra msgbox avisando que chegou no fim
tb.MoveLast [ô]fica posicionado no ultimo registro
End If [ô]fecha o if
Call Mostrar_Dados [ô]chama (call) a rotina que mostra os dados
End Sub
Acho essa bem melhor.Veiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinha.
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
Essa última é bacana mesmo e mais simples pra mim que sou iniciante, mas ela é ADO......
Amigo, dica quente pra você: Se está começando, nem passe pelo DAO, vá direto para o ADO. DAO é tecnologia morta, e não tem nenhum remanescente hoje.
Obrigada por sua sugestão, para te falar a verdade eu estou com essa dúvida mesmo, e quanto mais procuro, mais em duvida eu fico. Cada lugar fala uma coisa, e também dizem que DAO é mais simples e melhor para aplicações pequenas...... CADA VEZ MAIS EM DUVIDA.... Enfim, sobre estar morta, não parece estar tão morta assim, veja abaixo alguns exemplos de pessoas renomadas na área:
http://www.macoratti.net/d040901.htm
http://www.maximoaccess.com/t14471-escolher-entre-dao-e-ado
https://accessexperts.com/blog/2013/04/09/dao-or-adodb-which-one-should-you-use-and-when/ ( ESTE AQUI DIZ QUE ADO é QUE TA OBSOLETO)
http://www.maximoaccess.com/t12682-dao-ou-adodb-qual-deles-voce-deve-usar-e-quando
http://www.maximoaccess.com/t5402-consideracoes-sobre-dao-e-ado
http://www.macoratti.net/d040901.htm
http://www.maximoaccess.com/t14471-escolher-entre-dao-e-ado
https://accessexperts.com/blog/2013/04/09/dao-or-adodb-which-one-should-you-use-and-when/ ( ESTE AQUI DIZ QUE ADO é QUE TA OBSOLETO)
http://www.maximoaccess.com/t12682-dao-ou-adodb-qual-deles-voce-deve-usar-e-quando
http://www.maximoaccess.com/t5402-consideracoes-sobre-dao-e-ado
Bom, eu não queria criar polêmica, mas em se tratando de Access, o DAO tem uma performance melhor do que ADO.
Em se tratando de VB6, acho que não há outra opção além do ADO.
Mas se vc está começando, porque vc já não parte para o .Net?
Em se tratando de VB6, acho que não há outra opção além do ADO.
Mas se vc está começando, porque vc já não parte para o .Net?
Pois é MARCOSLING, pelo visto essa discussão parece ser muito frequente, não quero também me aprofundar nisso,e nem tenho conhecimento para tanto.
Respondendo sua pergunta, eu preferi ACCESS pela facilidade, meu projeto é pequeno, e DAO pelo o que li suporta bem, além disso, ela também parece ser mais fácil. O .NET seria dar um passo maior que minhas pernas, e também maior do que preciso para este projeto. Enfim, acho que respondi sua pergunta, agora preciso que alguém responda a minha, pois ainda não consegui fazer os botões de navegação funcionarem a contento.
Respondendo sua pergunta, eu preferi ACCESS pela facilidade, meu projeto é pequeno, e DAO pelo o que li suporta bem, além disso, ela também parece ser mais fácil. O .NET seria dar um passo maior que minhas pernas, e também maior do que preciso para este projeto. Enfim, acho que respondi sua pergunta, agora preciso que alguém responda a minha, pois ainda não consegui fazer os botões de navegação funcionarem a contento.
Citação::
Pois é MARCOSLING, pelo visto essa discussão parece ser muito frequente, não quero também me aprofundar nisso,e nem tenho conhecimento para tanto.
Respondendo sua pergunta, eu preferi ACCESS pela facilidade, meu projeto é pequeno, e DAO pelo o que li suporta bem, além disso, ela também parece ser mais fácil. O .NET seria dar um passo maior que minhas pernas, e também maior do que preciso para este projeto. Enfim, acho que respondi sua pergunta, agora preciso que alguém responda a minha, pois ainda não consegui fazer os botões de navegação funcionarem a contento.
Dê uma olhada nesses links:
http://www.macoratti.net/07/05/vb_prgs.htm
http://www.macoratti.net/dao.htm
Acho que vai ajudar.
Verifica.
Graças ao seu exemplo OMAR2011 me clareou as ideias.... ufa...rs
Eu até cheguei a fazer assim, mas acho que o problema estava na conexao, toda vez que exutava a rotina para carregar os text, eu também abria a conexão. Foi retirar isso e funcionou igual perfeitamente.
Mas agora fiquei sem saber, quando devo abrir e fechar a conexao?
Obrigada desde já pela boa vontade de todos em me ajudar.
Eu até cheguei a fazer assim, mas acho que o problema estava na conexao, toda vez que exutava a rotina para carregar os text, eu também abria a conexão. Foi retirar isso e funcionou igual perfeitamente.
Mas agora fiquei sem saber, quando devo abrir e fechar a conexao?
Obrigada desde já pela boa vontade de todos em me ajudar.
Tópico encerrado , respostas não são mais permitidas