PROBLEMAS COM MOVENEXT, MOVEPREVIOUS...

USUARIO.EXCLUIDOS 06/09/2007 19:49:42
#234588
Pessoal, meu MoveNext só funciona do primeiro para o segundo registro, quando uso o MovePrevious dá erro, o MoveFirst funciona.
exemplo de como estrou usando:

Dim cnncomando As New ADODB.Command
Dim rs_Pronaf As New ADODB.Recordset

Private Sub Command1_Click()
With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With
With rs_Pronaf
rs_Pronaf.movenext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With
End Sub


Private Sub Form_Load()

With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With
With rs_Pronaf

Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub



agradeço a força!
ROBIU 06/09/2007 21:37:14
#234599
Resposta escolhida
Isso Acontece porque quando vc chega no primeiro registro não tem um anterior ou quando você chega no último registro não tem como move para o proxímo para resolver coloque isso:

Se tiver movendo para o começo faz assim

If Not rs.BOF Then  
rs.MovePrevious
If rs.BOF Then rs.MoveNext
End If


Se tiver movendo para o final faz assim

 If Not rs.EOF Then
rs.MoveNext
If rs.EOF Then rs.MovePrevious
End If


No seu caso, seria assim:

Private Sub Command1_Click()
With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With
With rs_Pronaf
If Not rs_Pronaf.EOF Then
rs_Pronaf.MoveNext
If rs_Pronaf.EOF Then rs_Pronaf.MovePrevious
End If

rs_Pronaf.movenext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With
End Sub

USUARIO.EXCLUIDOS 06/09/2007 22:22:17
#234602
Cara ainda não consegui, coloquei desta forma e agora ficou pulando do primeiro para o ultimo, fiz modificações e fica sempre assim, ou pula do primeiro para o ultimo ou do primeiro para o segundo...vou continuar tentando
USUARIO.EXCLUIDOS 06/09/2007 23:48:22
#234614
Amigo o problema contece pq vc abre sempre a conecao

Coloca essa parte no form Load ou em outro lugar fora do botao senao ele sempre da um sleect *
With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With



Deixa o botao desse jeito
Private Sub Command1_Click()
With rs_Pronaf
If Not rs_Pronaf.EOF Then
rs_Pronaf.MoveNext
If rs_Pronaf.EOF Then rs_Pronaf.MovePrevious
End If

rs_Pronaf.movenext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With
End Sub

USUARIO.EXCLUIDOS 07/09/2007 10:06:20
#234638
LANDOSP, pus desta forma, mas quando ocorre o Form_Load da erro na linha:

Set rs_Pronaf = .execute

erro = Argument not optional, e fica em destaque o ". execute"

Agradeço se puder pensar em outra saída para este pequeno porém Enorme problema, não pensei que fosse quebrar tanto a cabeça com um simples código para paginar registros.
USUARIO.EXCLUIDOS 07/09/2007 11:10:22
#234640
Acho que esqueci as referencias dos campos, porém colocando as mesmas o problema que citei anterior desaparece, mas ainda não consigo mover entre os campos pus assim:

no general:

Dim cnncomando As New ADODB.Command
Dim rs_Pronaf As New ADODB.Recordset


Private Sub Form_Load()

With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With
With rs_Pronaf
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With
End Sub


aqui está preenchendo os valores nos campos OK, mas o botão para passar os registros esse tá dificil!

colocando assim:

Private Sub Command1_Click()

With rs_Pronaf
If Not rs_Pronaf.EOF Then
rs_Pronaf.MoveNext
If rs_Pronaf.EOF Then rs_Pronaf.MovePrevious
End If

rs_Pronaf.MoveNext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub



Pula para o ultimo registro
USUARIO.EXCLUIDOS 07/09/2007 11:15:57
#234641
Opa! agora consegui, foi só tirar as condições e deixar simplesmente:

Private Sub Command1_Click()

With rs_Pronaf

rs_Pronaf.MoveNext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub


Agora é só arrumar um jeito de tratar o erro que dá quando chega ao final! hehehehehe se não fossem essas dificuldades realmente não seria tão interessante trabalhar com esse VB hehehehe!

Aceito opniões agora de como tratar esse erro valeu!, obrigado ROBIU e obrigado LANDOSP que até agora se aproximou mais da perfeição da resposta ao meu problema.
USUARIO.EXCLUIDOS 07/09/2007 19:26:39
#234670
Faz assim:

Private Sub Command1_Click()
if rs_Pronaf.EOF = true then
rs_Pronaf.MoveFirst' Vai para o primeiro se chegar no ultimo
else
rs_Pronaf.MoveNext
End if

Text1 = !cod
Text2 = !nome
Text3 = !municipio
End Sub


Private Sub Command2_Click()
if rs_Pronaf.BOF = true then
rs_Pronaf.MoveLast' Vai para o último se chegar no primeiro
else
rs_Pronaf.MovePrevious
End if

Text1 = !cod
Text2 = !nome
Text3 = !municipio
End Sub



USUARIO.EXCLUIDOS 08/09/2007 10:31:12
#234719
Resumo do problema/solução até agora:

Já consigo passar registro por registro com o MoveNext OK!

Consigo também mover para o primeiro registro com o MoveFirst OK!

O MovePrevious não funciona e dá o seguinte erro:

Run Time Error '3219' Operação não permitida neste contexto

O MoveLast não funciona e dá o seguinte erro:

Run time error '2147217884(80040e24)
o conjunto de linhas não oferece suporte para busca regressiva

abaixo todo o codigo:

general declarations

Dim cnncomando As New ADODB.Command
Dim rs_Pronaf As New ADODB.Recordset


Private Sub Command1_Click()
With rs_Pronaf

rs_Pronaf.MoveNext
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub


Private Sub Command2_Click()
With rs_Pronaf

rs_Pronaf.MoveFirst

Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub


Private Sub Command3_Click()
With rs_Pronaf

rs_Pronaf.MoveLast
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub


Private Sub Command4_Click()
With rs_Pronaf

rs_Pronaf.MovePrevious
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With

End Sub


Private Sub Form_Load()
With cnncomando
.ActiveConnection = cnnProjetos
.CommandType = adCmdText
.CommandText = " select * from projetos "
Set rs_Pronaf = .Execute
End With
With rs_Pronaf
Text1 = !cod
Text2 = !nome
Text3 = !municipio
End With
End Sub



quanto ao erro de quando o EOF = TRUE acho que posso ver isto depois sendo que pus um tratamento de erro e ta satisfatorio no momento, ele avisa que chegou ao final com um msgbox e fica parado no ultimo.
USUARIO.EXCLUIDOS 08/09/2007 13:25:32
#234750
Obrigado ROBIU pela as alterações que vc fez no projeto, além de ter deixado com os comentários com os quais eu pude entender como se deu a mudança no código.

Valeu!
Tópico encerrado , respostas não são mais permitidas