NAVEGAR PELOS REGISTROS

MACKEY 03/06/2010 13:04:52
#343801
boa tarde jovens, estou com mais uma duvida, e vim novamente pedir a ajuda de voces....
estou querendo fazer que meu programa na tela de cadastro de produtos navegue pelos produtos tipo, clico em proximo e ele passa para o proximo registro, mas estou usando ado para isso, tentei fazer mas ele da um erro assim:

operaçao nao permitida quando o objeto esta fechado

abaixo passo o fonte para que possam dar uma olhada....

Private Sub Form_Load()
Dim cnncomando As New ADODB.Command
Dim rec As New ADODB.Recordset
rec.open [Ô]select * from tblprodutos[Ô], cnnsoftpark, adOpenKeyset, adLockOptimistic


With cnncomando
.ActiveConnection = cnnsoftpark
.CommandType = adCmdText
.CommandText = [Ô]select * from tblprodutos[Ô]
Set rec = .Execute

End With
With rec
If .EOF And .BOF Then
TxtCodProd.SetFocus
Else
TxtCodProd.Enabled = False
TxtCodProd.Text = !IdProduto
TxtDescProd.Text = !descricao
TxtPrecProd.Text = !valor
TxtImpProd.Text = !imposto
TxtSetProd.Text = !idsetor
TxtCatImpProd.Text = !categoriaimposto
End If
End With
End Sub



Private Sub ImgPro_Click()

rec.MoveNext
If rec.EOF Then
rec.MoveLast
MsgBox [Ô]nao existe mais produtos[Ô], vbInformation, [Ô]aviso[Ô]
End If

TxtCodProd.Text = rec!IdProduto
TxtDescProd.Text = rec!descricao
TxtPrecProd.Text = rec!valor
TxtImpProd.Text = rec!imposto
TxtSetProd.Text = rec!idsetor
TxtCatImpProd.Text = rec!categoriaimposto
End Sub


postei o form load e depois o botao que deveria navegar pelos registros, qualquer ajuda é muito bem vinda, obrigado..

MACKEY 03/06/2010 14:42:30
#343812
coloquei ate a tela pra ver se ajuda......o botao é o proximo, acho que o resto eu devo conseguir fazer, rsrs

TECLA 03/06/2010 15:55:15
#343816
Resposta escolhida
Primeiramente, declare a linha abaixo no General Declarations.
Dim rec As ADODB.Recordset


Em seguida, faça uma pequena alteração na rotina do botão Próximo.
Private Sub ImgPro_Click()
rec.MoveNext
If rec.EOF Then
rec.MovePrevious
End If
Call MostrarDados
End Sub


Pra facilitar (e organizar) criei uma sub-rotina para apresentar os dados no Form.
Sub MostrarDados()
TxtCodProd.Text = rec!IdProduto
TxtDescProd.Text = rec!descricao
TxtPrecProd.Text = rec!valor
TxtImpProd.Text = rec!imposto
TxtSetProd.Text = rec!idsetor
TxtCatImpProd.Text = rec!categoriaimposto
End Sub


Veja se funciona e retorne o resultado no tópico.
MACKEY 03/06/2010 16:09:56
#343819
funcionou, somente tive que acrescentar algumas coisas, mas tem outra coisa...ele só mosra o proximo produto, tenho mais 7 produtos cadastrados e ele só funciona ate o 2º ai é como se o botao nao funcionasse mais....

Private Sub ImgPro_Click()
Set rec = New ADODB.Recordset
With rec
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.open [Ô]tblprodutos[Ô], cnnsoftpark, , , adCmdTable
rec.MoveNext
End With
If rec.EOF Then
rec.MovePrevious
End If
Call mostrardados
End Sub
TECLA 03/06/2010 20:02:40
#343832
O código que postou está incorreto.
Vou tentar corrigí-lo aqui sem VB (por isso, teste e veja se funciona).

Declaração no General Declarations
Dim rec As ADODB.Recordset


Rotina para o evento LOAD do FORM
Set rec = New ADODB.Recordset
rec.Open [Ô]SELECT * FROM tblprodutos[Ô], cnnsoftpark, adOpenKeyset, adLockOptimistic
If rec.RecordCount > 0 Then
Call MostrarDados
Me.Caption = rec.RecordCount & [Ô] registro(s).[Ô]
End If


Rotina para o botão PRÓXIMO
Private Sub ImgPro_Click()
rec.MoveNext
If rec.EOF Then
rec.MovePrevious
End If
Call MostrarDados
End Sub


Creio que resolva.
MACKEY 03/06/2010 20:37:01
#343841
valeu mesmo, ficou dessa forma...

Private Sub ImgPro_Click()
rec.MoveNext
If rec.EOF Then
rec.MovePrevious
End If
Call mostrardados
End Sub


mas quando chego no ultimo registro, se clico em proximo novamente ele da esse erro:

operação nao permitida nesse contexto
TECLA 03/06/2010 20:40:22
#343842
Tente mais uma alteração.

Private Sub ImgPro_Click()
If rec.EOF = False Then
rec.MoveNext
Call mostrardados
Else
[txt-color=#007100][ô]Não faça nada... ou mostre uma mensagem para o usuário[/txt-color]
End If
End Sub
MACKEY 03/06/2010 20:44:22
#343843
tecla nao quero abusar da sua paciencia...mas agora deu outro erro:

BOF ou EOF sao verdadeiros, ou o registro atual foi excluido. a operaçao solicitada pelo aplicativo requer um registro atual

e ele aponta para a sub mostrar dados....
XXXANGELSXXX 04/06/2010 08:27:27
#343854
Faça assim...
  
[ô]Mover para Primeiro Registro
Case 1
If Not RS.BOF Then
RS.MoveFirst

End If
[ô]Mover para Registro Anterior
Case 2
If Not RS.BOF Then
RS.MovePrevious
If RS.EOF Then
RS.MoveLast
End If
Else
RS.MoveLast

End If
[ô]Mover para Proximo Registro
Case 3

If Not RS.EOF Then
RS.MoveNext
If RS.EOF Then
RS.MoveFirst
End If
Else
RS.MoveFirst
End If
[ô]Mover para Ultimo Registro
Case 4
If Not RS.EOF Then
RS.MoveLast

End If
MACKEY 04/06/2010 13:42:29
#343888
valeu tecla.....funcionou, tb precisei adicionar uma linha:
cnnProjetos.CursorLocation = adUseClient

mas ta tudo ok, valeu mesmo hein...
Tópico encerrado , respostas não são mais permitidas