Ir para conteúdo
Fórum Script Brasil
  • 0

sub não retorna certo


tito13

Pergunta

Não estou conseguindo encontrar o erro.

Nas duas sub retorna o primeiro registro da tabela ao invés de ir para proximo ou anterior como deveria.

Private Sub ProximoRegistro()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
    With cnnComando
        .ActiveConnection = cnnLider
        .CommandType = adCmdText
        .CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"
        Set rsSelecao = .Execute
        If rsSelecao.EOF = True Then
            rsSelecao.MoveNext
        End If
    End With
    Mostrar
Saida:
    'elimina o comand e o recorset da memoria:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    
    Exit Sub
End Sub
Private Sub RegistroAnterior()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
    With cnnComando
        .ActiveConnection = cnnLider
        .CommandType = adCmdText
        .CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"
        Set rsSelecao = .Execute
        If rsSelecao.BOF = True Then
            rsSelecao.MovePrevious
        End If
    End With
    Mostrar
Saida:
    'elimina o comand e o recorset da memoria:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault
    Exit Sub
End Sub

Private Sub Mostrar()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
    With cnnComando
        .ActiveConnection = cnnCetecInfServiços
        .CommandType = adCmdText
        .CommandText = "Select * From Clientes"
        Set rsSelecao = .Execute
        TxtCodCliente.Text = rsSelecao!Codigo_Cliente
        TxtNomeCliente.Text = rsSelecao!Nome
        TxtTel.Text = rsSelecao!Telefone
        TxtCidade.Text = rsSelecao!Cidade
        TxtDataInicioServico.Text = rsSelecao!Data_Inicio_Servico
        TxtHoraInicioServico.Text = rsSelecao!Hora_Inicio_Servico
        TxtProduto.Text = rsSelecao!Produto
        TxtMotivo.Text = rsSelecao!Motivo_Chamada
        TxtObs.Text = rsSelecao!Obs
    End With
Saida:
    'elimina o comand e o recorset da memoria:
    Set rsSelecao = Nothing
    Set cnnComando = Nothing
    Screen.MousePointer = vbDefault
    Exit Sub
End Sub


Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
    'verifica qual botao foi clicado
    Select Case Button.Index
        Case 1
             'botao gravar
             GravarDados
        Case 2
             'botao limpar
             LimparDados
        Case 3
             'botao excluir
             ExcluirRegistro
        Case 4
             'botao retornar
             Unload Me
        Case 5
             'botão próximo registro
             ProximoRegistro
        Case 6
             'botão registro anterior
             RegistroAnterior
    End Select
End Sub

Se alguém puder me ajudar.

Agradeço.

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

então, você não pode ficar abrindo e fechando o recordset toda hora. você tem dexa-lo aberto e ai você so vai movimentar o cursor dentro dele. se você descarta o recordset no final da sub, ele perde os dados, quando você abrir de novo, ele vai abrir na primera linha.

você tem q declarar o recordset la em cima no generals, e abrir so uma vez (no form_load por exemplo) e so fechar no unload do formulario. e outro erro é esse aqui:

If rsSelecao.EOF = True Then
    rsSelecao.MoveNext
End If[/code] ele so vai tenta mover pro proximo quando tiver no fim do arquivo. ai isso daria erro ne. acho q era pra ser assim o q você quer:
[code]If rsSelecao.EOF <> True Then
ou pra facilitar ainda:
If Not rsSelecao.EOF Then

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Kuroi, mas infelizmente não resolveu.

Fiz as alteraçoes sugiridas mas ele continua igual.

Por exemplo: se eu me posiciono no terceiro lançamento e clico para ele ir para o proximo ele retorna para o primeiro lançamento da tabela e isso acontece tambem quando clico para ele ir para o anterior. Mesmo que as subs sejam diferentes ocorre a mesma coisa.

Fiz as alteraçoes:

Coloquei na General:

Dim rsSelecao As New ADODB.Recordset

e alterei:

Private Sub ProximoRegistro()

Dim cnnComando As New ADODB.Command

With cnnComando

.ActiveConnection = cnnCetecInfServiços

.CommandType = adCmdText

.CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"

Set rsSelecao = .Execute

If rsSelecao.EOF <> True Then

rsSelecao.MoveNext

End If

End With

Mostrar

End Sub

Private Sub RegistroAnterior()

Dim cnnComando As New ADODB.Command

With cnnComando

.ActiveConnection = cnnCetecInfServiços

.CommandType = adCmdText

.CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"

Set rsSelecao = .Execute

If rsSelecao.BOF <> True Then

rsSelecao.MovePrevious

End If

End With

Mostrar

End Sub

Se puder me de mais alguma dica.

Link para o comentário
Compartilhar em outros sites

  • 0

olhai:

.CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"
Set rsSelecao = .Execute[/code]

você ainda ta executando o recordset toda hora.

não é pra fazer isso, é pra executar so uma vez. cada vez q você executa, ele seleciona td de novo e descarta o q ele tinha antes. assim, ele perde a posicao do cursor e volta pro primero registro.

Link para o comentário
Compartilhar em outros sites

  • 0

então kuroi, obrigado pela paciencia

mas veja

agora, depois da arrumaçao, ficou assim:

na general

Dim rsSelecao As New ADODB.Recordset

abro a recodset aqui

Private Sub TxtCodCliente_LostFocus()

Dim cnnComando As New ADODB.Command

Dim rsSelecao As New ADODB.Recordset

On Error GoTo errSelecao

'verifica se foi digitado codigo valido

If Val(TxtCodCliente.Text) = 0 Then

MsgBox "Não foi digitado um código válido, verifique.", vbExclamation + vbOKOnly + vbApplicationModal, "Erro"

Exit Sub

End If

Screen.MousePointer = vbHourglass

With cnnComando

.ActiveConnection = Lider

.CommandType = adCmdText

'monta o comando select para selecionar o registro na tabela.

.CommandText = "SELECT * FROM Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"

Set rsSelecao = .Execute

End With

With rsSelecao

If .EOF And .BOF Then

'se recorset estiver vazio não retona registro com o codigo

LimparDados

'identifica a operaçao como inclusao

vInclusao = True

Else

'senao atribui ao campo os dados do registro

TxtNomeCliente.Text = !Nome

TxtTel.Text = Empty & !Telefone

TxtCidade.Text = !Cidade

TxtDataInicioServico.Text = !Data_Inicio_Servico

TxtHoraInicioServico.Text = !Hora_Inicio_Servico

TxtProduto.Text = !Produto

TxtMotivo.Text = !Motivo_Chamada

TxtObs.Text = !Obs

'identifica a operacao como alteracao:

vInclusao = False

'Habilita o botao excluir

Toolbar1.Buttons(3).Enabled = True

End If

End With

'desabilita a digitacao do campo codigo

TxtCodCliente.Enabled = False

Saida:

'elimina o comand e o recorset da memoria:

Set cnnComando = Nothing

Screen.MousePointer = vbDefault

Exit Sub

errSelecao:

With Err

If .Number <> 0 Then

MsgBox "Houve um erro na recuperacao do registro solicitado.", vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"

.Number = 0

GoTo Saida

End If

End With

End Sub

não fecho e abro as subs assim

Private Sub ProximoRegistro()

Dim cnnComando As New ADODB.Command

With cnnComando

.ActiveConnection = cnnlider

.CommandType = adCmdText

.CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"

.Execute

If rsSelecao.EOF <> True Then

rsSelecao.MoveNext

End If

End With

Mostrar

End Sub

Private Sub RegistroAnterior()

Dim cnnComando As New ADODB.Command

With cnnComando

.ActiveConnection = cnnLider

.CommandType = adCmdText

.CommandText = "Select * From Clientes WHERE Codigo_Cliente = " & TxtCodCliente.Text & ";"

.Execute

If rsSelecao.BOF <> True Then

rsSelecao.MovePrevious

End If

End With

Mostrar

End Sub

e me retorna dizendo que o objeto não esta aberto????

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...