BOTOES DE NAVEGACAO ANTERIOR E PROXIMO VB6
Pessoal,
Estou fazendo uma aplicação em VB6 e estou tendo muitos problemas com os botões de navegação Anterior e Próximo. Quando clico no botão próximo ele passa apenas um registro e só fica nele, ou seja, não navega para os demais registros.
Para o botão próximo por exemplo eu fiz o seguinte:
Private Sub ProximoRegistroBanco()
Set rsSelecaoBanco = Nothing
Set CN = Nothing
CN.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN.Properties([Ô]Password[Ô]).Value = [Ô]tecsis[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN.Open [ô] Abrindo a conexão
Set rsSelecaoBanco = New ADODB.Recordset
Set rsSelecaoBanco.ActiveConnection = CN
rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic
rsSelecaoBanco.MoveNext
If rsSelecaoBanco.EOF Then
MsgBox [Ô]Fim do Arquivo, Registros indisponÃveis[Ô], vbInformation
rsSelecaoBanco.MoveLast
End If
End Sub
Depois coloquei na opção click do botão próximo:
ProximoRegistroBanco
MostrarBanco
Onde:
Private Sub MostrarBanco()
txtcodbanco.Text = rsSelecaoBanco!CODIGO
txtabrbanco.Text = rsSelecaoBanco!ABREVIATURA
txtnomebanco.Text = rsSelecaoBanco!Nome
End Sub
Poderiam me auxiliar neste problema?
Já fiz várias pesquisas e não consegui achar a solução
Abraço
Rogério Couto
Estou fazendo uma aplicação em VB6 e estou tendo muitos problemas com os botões de navegação Anterior e Próximo. Quando clico no botão próximo ele passa apenas um registro e só fica nele, ou seja, não navega para os demais registros.
Para o botão próximo por exemplo eu fiz o seguinte:
Private Sub ProximoRegistroBanco()
Set rsSelecaoBanco = Nothing
Set CN = Nothing
CN.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN.Properties([Ô]Password[Ô]).Value = [Ô]tecsis[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN.Open [ô] Abrindo a conexão
Set rsSelecaoBanco = New ADODB.Recordset
Set rsSelecaoBanco.ActiveConnection = CN
rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic
rsSelecaoBanco.MoveNext
If rsSelecaoBanco.EOF Then
MsgBox [Ô]Fim do Arquivo, Registros indisponÃveis[Ô], vbInformation
rsSelecaoBanco.MoveLast
End If
End Sub
Depois coloquei na opção click do botão próximo:
ProximoRegistroBanco
MostrarBanco
Onde:
Private Sub MostrarBanco()
txtcodbanco.Text = rsSelecaoBanco!CODIGO
txtabrbanco.Text = rsSelecaoBanco!ABREVIATURA
txtnomebanco.Text = rsSelecaoBanco!Nome
End Sub
Poderiam me auxiliar neste problema?
Já fiz várias pesquisas e não consegui achar a solução
Abraço
Rogério Couto
Bom dia Rogério.
Seu problema é o seguinte vc está abrindo a conexão na Sub ProximoRegistroBanco()
Quando o código: rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic; é executado
A variável rsSelecaoBanco é posicionada no primeiro registro
e logo abaixo vc da um MoveNext - posicionando no segundo registro.
Ou seja o cursor vai estar sempre no segundo registro
Seu problema é o seguinte vc está abrindo a conexão na Sub ProximoRegistroBanco()
Quando o código: rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic; é executado
A variável rsSelecaoBanco é posicionada no primeiro registro
e logo abaixo vc da um MoveNext - posicionando no segundo registro.
Ou seja o cursor vai estar sempre no segundo registro
Isto é a melhor forma de movimentar registro.
Para mim superou.
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
Para mim superou.
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
Amigo, não perde tempo com isso, esse tipo de busca vc não vai utilizar em sistemas, pelo menos profissionais, a não ser que com certeza tera muitos pocous registros. Porque ? Cadastre dezenas, centenas, milhares de registros, depois navegue hum a hum para encontrar algo.
Boa tarde KIMH,
Mais se eu não abrir a conexão o sistema retorna uma mensagem de erro dizendo que o banco está fechado.
Como posso resolver essa questão?
De ante mão, te agradeço a atenção
Mais se eu não abrir a conexão o sistema retorna uma mensagem de erro dizendo que o banco está fechado.
Como posso resolver essa questão?
De ante mão, te agradeço a atenção
Boa tarde Tri Campeão OMAR2011,
Eu tentei seguir o exemplo que me passou programando o botão anterior, porém ao realizar o teste a seguinte informação foi apresentada:
Run-time error [ô]3709[ô]
A operação solicitada requer um objeto OLE DB Session, para qual não há suporte do provedor atual.
Acho que é pq estou usando o Microsoft DAO 3.51 Object Library
Eu tentei seguir o exemplo que me passou programando o botão anterior, porém ao realizar o teste a seguinte informação foi apresentada:
Run-time error [ô]3709[ô]
A operação solicitada requer um objeto OLE DB Session, para qual não há suporte do provedor atual.
Acho que é pq estou usando o Microsoft DAO 3.51 Object Library
Roger posso te dar uma sugestão?
Bom quando iniciei com DAO eu usava os botões de navegação (movenext, moveprevious, movefirst, movelast), porém com o crescimento de banco de dados, percebi que não era muito funcional eu ficar clicando para chegar a um determinado registro, vamos supor que você possua uma lista com 5000 nomes, ja pensou se quiser localizar um registro na posicção 2500, você terá que dar 2500 cliques no botão, meio inviável não acha?
Bom minha dica preencha uma grid pode ser listbox, listview, msflexgrid(o que eu uso), dbgrid, ou seja o que se encaixar melhor pra você.
como funciona você coloca, ou todos os registros nesta grid e seleciona um para exibir os dados, ou coloca um campo txt onde vc digita uma letra e esta grid preenche todos registros que possuem esta letra.
esta é a maneira mais viável de se navegar nos registros
Bom quando iniciei com DAO eu usava os botões de navegação (movenext, moveprevious, movefirst, movelast), porém com o crescimento de banco de dados, percebi que não era muito funcional eu ficar clicando para chegar a um determinado registro, vamos supor que você possua uma lista com 5000 nomes, ja pensou se quiser localizar um registro na posicção 2500, você terá que dar 2500 cliques no botão, meio inviável não acha?
Bom minha dica preencha uma grid pode ser listbox, listview, msflexgrid(o que eu uso), dbgrid, ou seja o que se encaixar melhor pra você.
como funciona você coloca, ou todos os registros nesta grid e seleciona um para exibir os dados, ou coloca um campo txt onde vc digita uma letra e esta grid preenche todos registros que possuem esta letra.
esta é a maneira mais viável de se navegar nos registros
Tenta fazer assim
Private Sub Form_Load()
Set rsSelecaoBanco = Nothing
Set CN = Nothing
CN.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN.Properties([Ô]Password[Ô]).Value = [Ô]tecsis[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN.Open [ô] Abrindo a conexão
Set rsSelecaoBanco = New ADODB.Recordset
Set rsSelecaoBanco.ActiveConnection = CN
rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic
End Sub
Private Sub ProximoRegistroBanco()
rsSelecaoBanco.MoveNext
If rsSelecaoBanco.EOF Then
MsgBox [Ô]Fim do Arquivo, Registros indisponÃveis[Ô], vbInformation
rsSelecaoBanco.MoveLast
End If
End Sub
ProximoRegistroBanco
MostrarBanco
Private Sub MostrarBanco()
txtcodbanco.Text = rsSelecaoBanco!CODIGO
txtabrbanco.Text = rsSelecaoBanco!ABREVIATURA
txtnomebanco.Text = rsSelecaoBanco!Nome
End Sub
Obs.: Declare as variáveis de conexão com banco como publicas no form (deixando claro como nossos amigos acima conexão DAO já está ultrapassada).
Private Sub Form_Load()
Set rsSelecaoBanco = Nothing
Set CN = Nothing
CN.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN.Properties([Ô]Password[Ô]).Value = [Ô]tecsis[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN.Open [ô] Abrindo a conexão
Set rsSelecaoBanco = New ADODB.Recordset
Set rsSelecaoBanco.ActiveConnection = CN
rsSelecaoBanco.Open [Ô]SELECT * FROM SYSCONTROL.DBO.BANCO[Ô], CN, adOpenDynamic
End Sub
Private Sub ProximoRegistroBanco()
rsSelecaoBanco.MoveNext
If rsSelecaoBanco.EOF Then
MsgBox [Ô]Fim do Arquivo, Registros indisponÃveis[Ô], vbInformation
rsSelecaoBanco.MoveLast
End If
End Sub
ProximoRegistroBanco
MostrarBanco
Private Sub MostrarBanco()
txtcodbanco.Text = rsSelecaoBanco!CODIGO
txtabrbanco.Text = rsSelecaoBanco!ABREVIATURA
txtnomebanco.Text = rsSelecaoBanco!Nome
End Sub
Obs.: Declare as variáveis de conexão com banco como publicas no form (deixando claro como nossos amigos acima conexão DAO já está ultrapassada).
[txt-color=#e80000]Acho que é pq estou usando o Microsoft DAO 3.51 Object Library [/txt-color]
Isto é do Access.
Tem que ser do SqlServer 2008.
Mude a conexão para Sqlserver,isto é apenas de como fazer.
Isto é do Access.
Tem que ser do SqlServer 2008.
Mude a conexão para Sqlserver,isto é apenas de como fazer.
Caros amigos,
Obrigado pelas dicas de vocês.
Deu certo por aqui...botões anterior e próximo funcionando perfeitamente.
Concordo que os botões estão obsoletos de acordo com o grande fluxo de informações, porém, eu queria eles funcionando apenas para tê-los no sistema mesmo.
Muito obrigado a todos
Obrigado pelas dicas de vocês.
Deu certo por aqui...botões anterior e próximo funcionando perfeitamente.
Concordo que os botões estão obsoletos de acordo com o grande fluxo de informações, porém, eu queria eles funcionando apenas para tê-los no sistema mesmo.
Muito obrigado a todos
Tópico encerrado , respostas não são mais permitidas