Jump to content

Navegação entre registos.


Azelha

Recommended Posts

Já tive algumas "brincadeiras" com access mas nunca me aventurei com a conexão via VBA, hoje experimentei! Uma tabela e formulário fiz umas buscas, (Que grande confusão) mas consegui ligar-me à base de dados e à tabela, onde inseri 3 registos, para os visualizar no formulários, mas não consegui navegar entre os registos, tenho este código.


Option Compare Database
Option Explicit

Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset

Private Sub cmdPrevious_Click()
If rst.BOF And rst.EOF Then
rst.MovePrevious
End If
End Sub

Private Sub cmdSeguinte_Click()
If rst.BOF And rst.EOF Then
rst.MoveNext
End If
End Sub

Private Sub Form_Load()
Set cnx = New ADODB.Connection
cnx.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source = C:\Users\daddy\Desktop\tstConectaAdo\dbConnecta.mdb"
cnx.Open

Set rst = New ADODB.Recordset
rst.Open "tblTeste", cnx, adOpenKeyset, adLockOptimistic
rst.MoveLast

txtCamp1 = rst.Fields("Campo1")
txtCamp2 = rst.Fields("Campo2")

End Sub

Será que me podem ajudar?

Obrigado

Edited by apocsantos
Link to comment
Share on other sites

Não esse não é o problema. Ao alterar a propriedade para text nem abre a aplicação!

não é uma caixa de texto?

para receber o valor é na propriedade text.

edit:

tenta assim:

txtCamp1.text = rst.Fields("Campo1")

'ou
txtCamp1.text = rst.Fields(0) ' o zero significa o numero da coluna

' ou assim
txtCamp1.text = rst!Campo1

cumps

acao

Edited by acao
Link to comment
Share on other sites

Fiz alteração proposta e a aplicação deu erro ao abrir, (Qualquer coisa sobre foco no objecto) mas não posso de forma alguma contrapor o que me diz, mas parto dum principio lógico, se as caixas de texto do formulário (Access) navegam pelos 3 registos preenchidos na tabela e o erro apenas ocorre quando eu "por engano forço o acesso ao ID 0 ou ID 4", registos estes que não existem, parece-me que não é uma questão de receber o valor, o problema é não ter valor na tabela para mostrar. Portanto é necessário impedir "a coisa" de tentar aceder a registos que não existem.

Não sei se é possível mas tenho aqui o "projecto" h**p://maximoaccess.maisforum.com/download.forum?id=3412

Obrigado pela atenção dispensada.

Link to comment
Share on other sites

Peço desculpa, eu tinha a solução, só que me esqueci, Resolvido

Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
Dim numreg As Integer
Sub carrega()
If Not (rst.BOF = True Or rst.EOF = True) Then
txtCamp1 = rst.Fields(1)
txtCamp2 = rst.Fields(2)
Else
MsgBox ("Chegou ao fim dos registos"), vbCritical
End If
End Sub
Private Sub cmdCount_Click()
numreg = rst.RecordCount
MsgBox "Existem " & numreg
End Sub
Private Sub cmdPrevious_Click()
If Not (rst.BOF = True) Then
rst.MovePrevious
carrega
End If
End Sub

Private Sub cmdSeguinte_Click()
If Not (rst.EOF = True) Then
rst.MoveNext
carrega
End If
End Sub

Private Sub Form_Load()
Set cnx = New ADODB.Connection
cnx.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source = C:\Users\daddy\Desktop\tstConectaAdo\dbConnecta.mdb"
cnx.Open
Set rst = New ADODB.Recordset
rst.Open "select * from tblTeste", cnx, adOpenKeyset, adLockOptimistic
rst.MoveLast
carrega
End Sub
Edited by apocsantos
Link to comment
Share on other sites

boas

Private Sub cmdPrevious_Click()
If rst.BOF And rst.EOF Then
msgbox("não existem registos")
else
rst.MovePrevious
'se der erro aqui colocas «txtCamp1.setfocus»
txtCamp1.text = rst!Campo1
'e aqui «txtCampo2.setfocus
txtCamp1.text = rst!Campo2

End If
End Sub

Private Sub cmdSeguinte_Click()
If rst.BOF And rst.EOF  Then
msgbox("não existem registos")
else
rst.MoveNext
if rst.EOF Then  'se estiver fora dos registos ou seja no fim da tabela
MsgBox("não tem mais registos")
else
'se der erro aqui colocas «txtCamp1.setfocus»
txtCamp1.text = rst!Campo1
'e aqui «txtCampo2.setfocus
txtCamp1.text = rst!Campo2
End if
End If
End Sub

cumps

acao

Edited by acao
Link to comment
Share on other sites

Esta parte foi resolvida, passei à fase seguinte e apesar de muito googlar não encontrei nada suficiente simples ou esclarecedor para me ajudar no proximo passo.

Acima tenho a parte do código referente ao formulário frmTeste, o codigo abaixo refere-se ao subform de CONTÍNUNO ligado à respectiva tabela

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Form_Load()
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source = C:\Users\daddy\Desktop\tstConectaAdo\dbConnecta.mdb"
cnn.Open
Set rs = New ADODB.Recordset
rs.Open "select * from tblProduto", cnn, adOpenDynamic, adLockReadOnly

txtMarca = rs.Fields(2)
txtModelo = rs.Fields(3)
End Sub

O que eu pretendo é relacionar / sincronizar o subform com o formulário, para preencher as tabelas.

Um problema que já notei, para testar o subformulário, preenchi alguns registos da tabela correspondente, (ID duplicação autorizada) creio que, como normalmente sucede o subformulário CONTÍNUO deveria abrir tantas linhas quantas o ID correspondente, no entanto só abre uma linha.

Obrigado pela atenção.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.