BOTAO PRIMEIRO, ANTERIOR, PROXIMO E ULTIMO
Estou com um problema e está dificil resolver, o que acontece é que criei um Form pra Cadastro de Usuários, estou conseguindo adicionar novo, alterar, limpar, excluir. mover (first, next, previous, last), o problema está se eu fizer:
gravação(Ele não está mais gravando um novo)
alteração(atualiza, ma só consigo visualizar corretamente quando reinicio o programa)
exclusão(Exclui, mais só tem efeito quando reinicio o programa)
Pesquisar(Se eu pesquisar, ele encontra, consigo excluir e alterar sem problemas, mais só consigo ver a mudança na reinicialização)
o Grande problema disso tudo é que se eu apertar em pesquisar e depois tentar movimentar ele da erro, e não vai mais.
módulo com variáveis e conexão
form Cadastro Usuario (Apenas partes que possa interessar)
criei aquele seleciona pra tentar ver se dava pra ajeitar o RecordSet, mais não conseguir utilizar certo.
Utilizei algumas coisas de uma apostila e outras dessa aqui http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=617
Na apostila não tinha os botões de movimento, tinha alguns erros mais tinha conseguido fazer rodar exatamente certo..Alterava, Exclui, Gravava, e Pesquisava Ok
Postarei aqui em Anexo o Projeto sem esses botões de movimento onde está funcionando certo
Desculpe a encheção de saco galera, só que não quero ficar apenas dependendo do que ensina na Apostila, Muito Obrigado desde já
gravação(Ele não está mais gravando um novo)
alteração(atualiza, ma só consigo visualizar corretamente quando reinicio o programa)
exclusão(Exclui, mais só tem efeito quando reinicio o programa)
Pesquisar(Se eu pesquisar, ele encontra, consigo excluir e alterar sem problemas, mais só consigo ver a mudança na reinicialização)
o Grande problema disso tudo é que se eu apertar em pesquisar e depois tentar movimentar ele da erro, e não vai mais.
módulo com variáveis e conexão
Public cnnBiblio As New ADODB.Connection
Public cnnComando As New ADODB.Command
Public rsSelecao As New ADODB.Recordset
Public Sub conecta()
On Error GoTo ErrConexao
cnnBiblio.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]\Biblio.mdb;[Ô]
cnnBiblio.Open
rsSelecao.Open [Ô]Usuarios[Ô], cnnBiblio, 3
Exit Sub
ErrConexao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro na conexão com o banco de dados.[Ô] & vbCrLf & [Ô]O sistema será encerrado.[Ô], vbCritical + vbOKOnly + vbApplicationModal, [Ô]Erro na Conexão[Ô]
.numero = 0
Set cnnBiblio = Nothing
End
End If
End With
End Sub
form Cadastro Usuario (Apenas partes que possa interessar)
Dim vInclusao As Boolean
Private Sub Form_Load()
[ô] Centralizar o formulário na área de trabalho do MDI
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Left = (frmBiblio.ScaleHeight - Me.Height) / 2
cmdUltimo_Click [ô]Carrega no primeiro momento
End Sub
Public Sub seleciona()
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
.CommandText = [Ô]Select * from Usuarios;[Ô]
Set rsSelecao = .Execute
End With
End Sub
Public Sub carrega()
txtCodUsuario.Text = rsSelecao(0)
txtNomeUsuario.Text = rsSelecao(1)
txtEndereco.Text = rsSelecao(2)
txtCidade.Text = rsSelecao(3)
txtEstado.Text = rsSelecao(4)
txtCEP.Text = rsSelecao(5)
txtTelefone.Text = rsSelecao(6)
End Sub
Private Sub cmdPrimeiro_Click()
rsSelecao.MoveFirst
carrega
End Sub
Private Sub cmdAnterior_Click()
rsSelecao.MovePrevious
If rsSelecao.BOF Then [ô]Se o registro atual for o primeiro registro
rsSelecao.MoveFirst [ô]Move para o primeiro registro
End If
carrega
End Sub
Private Sub cmdProximo_Click()
rsSelecao.MoveNext
If rsSelecao.EOF Then [ô]Se o registro atual for o primeiro registro
rsSelecao.MoveLast [ô]Move para o primeiro registro
End If
carrega
End Sub
Private Sub cmdUltimo_Click()
rsSelecao.MoveLast
carrega
End Sub
Private Sub cmdPesquisar_Click()
On Erro GoTo errSelecao
[ô]Verifica se foi digitado um comando válido
If Val(txtCodUsuario.Text) = 0 Then
MsgBox [Ô]Não foi digitado nenhuma código válido, verifique.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
Exit Sub
End If
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
.CommandText = [Ô]Select * from Usuarios Where CodUsuario=[Ô] & txtCodUsuario.Text & [Ô];[Ô]
Set rsSelecao = .Execute
End With
With rsSelecao
If .EOF And .BOF Then
[ô]Se o recordset está vazio, não retornou nenhum registro com esse código
LimparDados
[ô]Identifica a operação como inclusão
vInclusao = True
Else
[ô]Senão, atribui aos campos os dados do registro
carrega
[ô]Identifica a operacao como Alteração
vInclusao = False
[ô]Habilita o botão excluir
Toolbar1.Buttons(3).Enabled = True
End If
End With
[ô]Desabilita a digitação do campo código
txtCodUsuario.Enabled = False
Saida:
[ô]Elimina o command e o recordset da memória
Set reSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
errSelecao:
With Err
If .numer <> 0 Then
MsgBox [Ô]Houve um erro na recuperação do registro solicitado.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Aviso[Ô]
.Number = 0
.GoTo Saida
End If
End With
End Sub
Private Sub GravarDados()
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao
[ô]Inicializa as variáveis auxiliares
vConfMsg = vbExclamation + vbOKOnly + vbSystemaModal
vErro = False
[ô]Verifica os dados digitados
If txtNomeUsuario.Text = Empty Then
MsgBox [Ô]O campo nome não foi preenchido[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtEndereco.Text = Empty Then
MsgBox [Ô]O campo Endereço não foi preenchido[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtCidade.Text = Empty Then
MsgBox [Ô]O campo Cidade não foi preenchido[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtEstado.Text = Empty Then
MsgBox [Ô]O campo Estado não foi preenchido[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
If txtCEP.Text = Empty Then
MsgBox [Ô]O campo CEP não foi preenchido[Ô], vConfMsg, [Ô]Erro[Ô]
vErro = True
End If
[ô]Se aconteceu algum erro (Se vErro = true), sai da Sub
If vErro Then Exit Sub
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Verifica a operação e cria o comando SQL correspondente
If vInclusao Then
[ô]Inclusão
.CommandText = [Ô]Insert Into Usuarios [Ô] & _
[Ô](CodUsuario, NomeUsuario, Endereco, Cidade, Estado, CEP, Telefone) Values ([Ô] & _
txtCodUsuario.Text & [Ô],[ô][Ô] & _
txtNomeUsuario.Text & [Ô][ô],[ô][Ô] & _
txtEndereco.Text & [Ô][ô],[ô][Ô] & _
txtCidade.Text & [Ô][ô],[ô][Ô] & _
txtEstado.Text & [Ô][ô],[ô][Ô] & _
txtCEP.Text & [Ô][ô],[ô][Ô] & _
txtTelefone.Text & [Ô][ô]);[Ô]
Else
[ô]Alteração
.CommandText = [Ô]UPDATE Usuarios SET NomeUsuario=[ô][Ô] & txtNomeUsuario.Text & [Ô][ô], Endereco=[ô][Ô] & txtEndereco.Text & _
[Ô][ô], Cidade=[ô][Ô] & txtCidade.Text & [Ô][ô], Estado=[ô][Ô] & txtEstado.Text & [Ô][ô], CEP=[ô][Ô] & txtCEP.Text & _
[Ô][ô], Telefone=[ô][Ô] & txtTelefone.Text & _
[Ô][ô] where CodUsuario=[Ô] & txtCodUsuario.Text & [Ô]; [Ô]
End If
.Execute
End With
MsgBox [Ô]Gravação realizada com sucesso[Ô], vbApplicationModal + vbInformation + vbOKOnly, [Ô]Gravação Ok[Ô]
[ô]Chama a sub que limpa os dados do formulário
[ô] LimparTela
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro durante a gravação dos dados na tabela.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
GoTo Saida
End If
End With
End Sub
Private Sub ExcluirRegistro()
Dim vOk As Integer
On Error GoTo errExclusao
[ô]Solicita confirmação da exclusão do registro
vOk = MsgBox([Ô]Confirma Exclusão do Registro?[Ô], vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, [Ô]Exclusão[Ô])
If vOk = vbYes Then
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = [Ô]Delete from Usuarios Where CodUsuario = [Ô] & txtCodUsuario.Text & [Ô];[Ô]
.Execute
End With
MsgBox [Ô]Registro ExcluÃdo com sucesso[Ô], vbApplicationModal + vbInformation + vbOKOnly, [Ô]Exclusão Ok[Ô]
[ô]Chama a sub de limpar todos os campos do formulário
LimparTela
End If
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errExclusao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro durante a exclusão do registro[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
GoTo Saida
End If
End With
End Sub
criei aquele seleciona pra tentar ver se dava pra ajeitar o RecordSet, mais não conseguir utilizar certo.
Utilizei algumas coisas de uma apostila e outras dessa aqui http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=617
Na apostila não tinha os botões de movimento, tinha alguns erros mais tinha conseguido fazer rodar exatamente certo..Alterava, Exclui, Gravava, e Pesquisava Ok
Postarei aqui em Anexo o Projeto sem esses botões de movimento onde está funcionando certo
Desculpe a encheção de saco galera, só que não quero ficar apenas dependendo do que ensina na Apostila, Muito Obrigado desde já
então cara depois dessa sub LimparTela vc tem que recarregar as funcoes de select novamente exemplo:
----------------
[ô]Chama a sub de limpar todos os campos do formulário
LimparTela
seleciona [ô]para selecionar todos os registros
carrega [ô]para carregar todos os registros
----------------
[ô]Chama a sub de limpar todos os campos do formulário
LimparTela
seleciona [ô]para selecionar todos os registros
carrega [ô]para carregar todos os registros
então dessa maneira ele funciona, mais tem um problema, eu aperto pro lado novamente, qualquer botão funciona, só que quando mudo o botão da a msg :
O Conjunto de linhas não pode fazer busca regressiva
mais ou menos isso
O Conjunto de linhas não pode fazer busca regressiva
mais ou menos isso
manda pro meu email luizcomino@hotmail.com pq está com erro aqui no site
Enviado, espero conseguir ajuda galera, se precisar agente recomeça do ponto em que estava funcionando!
Problema resolvido, fico com o seguinte código os botões do move
Private Sub cmdAnterior_Click() [ô] sub para ir para o registro anterior
Screen.MousePointer = vbHourglass [ô] mudar o ponteiro do mouse
With cnnComando [ô] com cnnComando
.ActiveConnection = cnnBiblio [ô] Ativa a conexão cnnComando.cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
[ô].CommandText = [Ô]Select * from Usuarios [Ô]
.CommandText = [Ô]select * from Usuarios where Codusuario=(select max(Codusuario) from Usuarios where Codusuario < ?)[Ô]
.Parameters(0).Value = txtCodUsuario.Text
Set rsSelecao = .Execute
End With
With rsSelecao
If Not .BOF Then
[ô]Senão, atribui aos campos os dados do registro
txtCodUsuario.Text = !CodUsuario
txtNomeUsuario.Text = !NomeUsuario
txtEndereco.Text = !Endereco
txtCidade.Text = !Cidade
txtEstado.Text = !Estado
txtCEP.Text = !CEP
txtTelefone.Text = Empty & !Telefone
[ô]Identifica a operacao como Alteração
vInclusao = False
[ô]Habilita o botão excluir
Toolbar1.Buttons(3).Enabled = True
ElseIf .BOF Then
[ô]MsgBox [Ô]InÃcio dos registros[Ô]
End If
End With
[ô]Desabilita a digitação do campo código
txtCodUsuario.Enabled = False
[ô]Elimina o command e o recordset da memória
Set reSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
End Sub
Private Sub cmdPrimeiro_Click()
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
[ô].CommandText = [Ô]Select * from Usuarios [Ô]
.CommandText = [Ô]select * from Usuarios where Codusuario=(select min(Codusuario) from Usuarios )[Ô]
Set rsSelecao = .Execute
End With
With rsSelecao
If Not .BOF Then
[ô]Senão, atribui aos campos os dados do registro
txtCodUsuario.Text = !CodUsuario
txtNomeUsuario.Text = !NomeUsuario
txtEndereco.Text = !Endereco
txtCidade.Text = !Cidade
txtEstado.Text = !Estado
txtCEP.Text = !CEP
txtTelefone.Text = Empty & !Telefone
[ô]Identifica a operacao como Alteração
vInclusao = False
[ô]Habilita o botão excluir
Toolbar1.Buttons(3).Enabled = True
[ô]MsgBox [Ô]InÃcio dos registros[Ô]
End If
End With
[ô]Desabilita a digitação do campo código
txtCodUsuario.Enabled = False
[ô]Elimina o command e o recordset da memória
Set reSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
End Sub
Private Sub cmdProximo_Click()
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
[ô].CommandText = [Ô]Select * from Usuarios [Ô]
.CommandText = [Ô]select * from Usuarios where Codusuario=(select min(Codusuario) from Usuarios where Codusuario > ?)[Ô]
.Parameters(0).Value = txtCodUsuario.Text
Set rsSelecao = .Execute
End With
With rsSelecao
If Not .EOF Then
[ô]Senão, atribui aos campos os dados do registro
txtCodUsuario.Text = !CodUsuario
txtNomeUsuario.Text = !NomeUsuario
txtEndereco.Text = !Endereco
txtCidade.Text = !Cidade
txtEstado.Text = !Estado
txtCEP.Text = !CEP
txtTelefone.Text = Empty & !Telefone
[ô]Identifica a operacao como Alteração
vInclusao = False
[ô]Habilita o botão excluir
Toolbar1.Buttons(3).Enabled = True
ElseIf .EOF Then
[ô]MsgBox [Ô]Fim dos registros[Ô]
End If
End With
[ô]Desabilita a digitação do campo código
txtCodUsuario.Enabled = False
[ô]Elimina o command e o recordset da memória
Set reSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
End Sub
Private Sub cmdUltimo_Click()
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
[ô]Monta o comando SELECT para selecionar o registro na tabela
[ô].CommandText = [Ô]Select * from Usuarios [Ô]
.CommandText = [Ô]Select * From Usuarios where CodUsuario=(select max(CodUsuario) from Usuarios )[Ô]
[ô].CommandText = [Ô]select * from Usuarios where CodUsuario=(select min(Codusuario) from Usuarios where Codusuario > ?)[Ô]
[ô].Parameters(0).Value = txtCodUsuario.Text
Set rsSelecao = .Execute
End With
With rsSelecao
If Not .EOF Then
[ô]Senão, atribui aos campos os dados do registro
txtCodUsuario.Text = !CodUsuario
txtNomeUsuario.Text = !NomeUsuario
txtEndereco.Text = !Endereco
txtCidade.Text = !Cidade
txtEstado.Text = !Estado
txtCEP.Text = !CEP
txtTelefone.Text = Empty & !Telefone
[ô]Identifica a operacao como Alteração
vInclusao = False
[ô]Habilita o botão excluir
Toolbar1.Buttons(3).Enabled = True
[ô]MsgBox [Ô]Fim dos registros[Ô]
End If
End With
[ô]Desabilita a digitação do campo código
txtCodUsuario.Enabled = False
[ô]Elimina o command e o recordset da memória
Set reSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
End Sub
Tópico encerrado , respostas não são mais permitidas