BOTAO PRIMEIRO, ANTERIOR, PROXIMO E ULTIMO

LUISSERA 15/03/2012 22:14:14
#397260
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
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á
LUIZCOMINO 16/03/2012 08:38:36
#397274
Resposta escolhida
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
LUISSERA 16/03/2012 09:06:07
#397277
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
LUIZCOMINO 16/03/2012 13:12:24
#397316
manda pro meu email luizcomino@hotmail.com pq está com erro aqui no site
LUISSERA 16/03/2012 13:38:42
#397318
Enviado, espero conseguir ajuda galera, se precisar agente recomeça do ponto em que estava funcionando!
LUISSERA 20/03/2012 09:05:52
#397594
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