LIGAR TABELAS, FORMS E SUBFORMS
O projecto passa por usar duas tabelas (tblTab1 e tblTab2) ligadas ao Form1 e subForm2 escrevi o seguinte código para o form1 ...
Para o subForm2, num 2º módulo fiz a mesma coisa! Fiz mais algumas coisas sem qualquer efeito.
No Form1 acrescentei os botões [Ô]move next[Ô] e [Ô]moveprevious[Ô], mas apesar de ter relacionado as tabelas pelo método Access [Ô]um-para-muitos[Ô], os botões não tem qualquer acção sobre o subForm2.
O meu pedido de ajuda, relaciona-se com isto como é que eu relaciono as duas tabelas por forma a que os botões tenham acção sob os registos do subForm2.
Obrigado
Dim cnx As New ADODB.Connection
Dim rst As New ADODB.Recordset
Sub liga()
txtCamp1 = rst.Fields([Ô]Campo1[Ô])
txtCamp2 = rst.Fields([Ô]Campo2[Ô])
End Sub
Private Sub Form_Load()
cnx.ConnectionString = [Ô]provider=Microsoft.jet.oledb.4.0; Data source = C:\Users\daddy\Desktop\vbtstConect stConnVb.mdb[Ô]
cnx.Open
rst.Open [Ô]tblTab1[Ô], cnx, adOpenKeyset, adLockOptimistic
liga
End Sub
Para o subForm2, num 2º módulo fiz a mesma coisa! Fiz mais algumas coisas sem qualquer efeito.
No Form1 acrescentei os botões [Ô]move next[Ô] e [Ô]moveprevious[Ô], mas apesar de ter relacionado as tabelas pelo método Access [Ô]um-para-muitos[Ô], os botões não tem qualquer acção sobre o subForm2.
O meu pedido de ajuda, relaciona-se com isto como é que eu relaciono as duas tabelas por forma a que os botões tenham acção sob os registos do subForm2.
Obrigado
Não ficou muito claro, mas ao que parece, em cada formulário você está carregando os dados de uma tabela distinta, por meio de dois recordsets igualmente distintos. Desta forma, os dois recordsets não estão relacionados no código VB, ok?
Para que ao mover-se de registro em um dos forms, o outro reflita isto, carregando apenas os registros [Ô]filhotes[Ô], será necessário: 1. - Coletar e enviar ao segundo formulário o código de registro do item selecionado no primeiro formulário;
2. - Filtrar o recordset do segundo formulário com base no código recebido desde o primeiro formulário.
De modo prático, alguém criaria uma variável pública ou global, do tipo inteiro longo, que receberia o ID do registro selecionado no primeiro formulário e seria utilizado então pelo segundo formulário.
Eu pessoalmente não faria isso, pois esse tipo de variável é visÃvel ao aplicativo, e pode ser alterada em qualquer momento por outro trecho de código que inadvertidamente utilizasse uma variável homônima. Ao contrário, eu criaria uma propriedade pública no segundo formulário, do tipo inteiro longo, que ao ser alterada, carregaria o recordset já filtrado via instrução SQL e atualizaria os dados nos componentes. Seria algo parecido com:
é claro, no formulário 1, assim que o Move do recordset completasse, seria preciso então atualizar essa propriedade do formulário 2, ago como:
Para que ao mover-se de registro em um dos forms, o outro reflita isto, carregando apenas os registros [Ô]filhotes[Ô], será necessário: 1. - Coletar e enviar ao segundo formulário o código de registro do item selecionado no primeiro formulário;
2. - Filtrar o recordset do segundo formulário com base no código recebido desde o primeiro formulário.
De modo prático, alguém criaria uma variável pública ou global, do tipo inteiro longo, que receberia o ID do registro selecionado no primeiro formulário e seria utilizado então pelo segundo formulário.
Eu pessoalmente não faria isso, pois esse tipo de variável é visÃvel ao aplicativo, e pode ser alterada em qualquer momento por outro trecho de código que inadvertidamente utilizasse uma variável homônima. Ao contrário, eu criaria uma propriedade pública no segundo formulário, do tipo inteiro longo, que ao ser alterada, carregaria o recordset já filtrado via instrução SQL e atualizaria os dados nos componentes. Seria algo parecido com:
[ô]...
[ô] No Formulário 2:
Private mCodigo As Long
[ô]...
Public Property Set Codigo(ByVal newValue As Long)
Me.mCodigo = newValue
Dim cs As String
Dim sq As String
cs = [Ô]provider=Microsoft.jet.oledb.4.0; Data source = C:\Users\daddy\Desktop\vbtstConect stConnVb.mdb[Ô]
sq = [Ô]SELECT [campo1],[campo2],...[campoN] FROM tblTab1 WHERE ([campoCodigo]=[Ô] & Me.mCodigo & [Ô])[Ô]
rst.Open sq, cs, adOpenKeyset, adLockOptimistic
txtCamp1.Text = rst.Fields([Ô]Campo1[Ô]).Value
txtCamp2.Text = rst.Fields([Ô]Campo2[Ô]).Value
rst.Close
End Property
[ô]...
é claro, no formulário 1, assim que o Move do recordset completasse, seria preciso então atualizar essa propriedade do formulário 2, ago como:
[ô]...
Formulario2.Codigo = rst([Ô]campoCodigo[Ô])
[ô]...
Obrigado pela atenção dispensada,
Tentei, mas não me funcionou. Porém tenho que confessar que a minha ignorância, não me permite [Ô]divagar[Ô] á volta do código apresentado.
O projecto que estou a tentar elaborar é em Access (No código apresentado, eliminei o [Ô].Text[Ô] e o [Ô].Value[Ô] proprio do Vb) e está terminado [Ô]na forma básica[Ô], mas não é bem funcional.
é pena que não encontro nada na web (Ou talvez eu não saiba procurar) que explique para principiantes como ligar um formulário e um subFormulário e com eles preencher as respectivas tabelas.
Normalmente o subFormulário no access ou o DataGrid do no vb, são preenchidos com os dados da tabela a que estão ligados, nunca encontrei exemplo que fizesse o inverso.
Obrigado pela atenção.
Tentei, mas não me funcionou. Porém tenho que confessar que a minha ignorância, não me permite [Ô]divagar[Ô] á volta do código apresentado.
O projecto que estou a tentar elaborar é em Access (No código apresentado, eliminei o [Ô].Text[Ô] e o [Ô].Value[Ô] proprio do Vb) e está terminado [Ô]na forma básica[Ô], mas não é bem funcional.
é pena que não encontro nada na web (Ou talvez eu não saiba procurar) que explique para principiantes como ligar um formulário e um subFormulário e com eles preencher as respectivas tabelas.
Normalmente o subFormulário no access ou o DataGrid do no vb, são preenchidos com os dados da tabela a que estão ligados, nunca encontrei exemplo que fizesse o inverso.
Obrigado pela atenção.
Não sei como pedir melhor ajuda, junto um prototipo.
Apenas pretendo se possivel a explicação para principiantes de como ligar / relacionar duas tabelas e seus respectivos formulário e subformulário (grid). O subFormulário deve preencher a tabela a que está ligado
Um bom ano, obrigado.
Apenas pretendo se possivel a explicação para principiantes de como ligar / relacionar duas tabelas e seus respectivos formulário e subformulário (grid). O subFormulário deve preencher a tabela a que está ligado
Dim cnx As New ADODB.Connection
Dim rst As New ADODB.Recordset
Sub carrega()
txtCamp1 = rst.Fields(1)
txtCamp2 = rst.Fields(2)
End Sub
Private Sub cmdAnterior_Click()
rst.MovePrevious
If Not (rst.BOF = True Or rst.EOF = True) Then
carrega
Else
MsgBox ([Ô]Chegou ao fim dos registos[Ô]), vbInformation, [Ô]Atenção[Ô]
End If
End Sub
Private Sub cmdFechar_Click()
DoCmd.Close
End Sub
Private Sub cmdRegistar_Click()
SQL = [Ô]insert into tblTab1 (Campo1, campo2) values ([ô][Ô] & txtCamp1 & [Ô][ô], [ô][Ô] & txtCamp2 & [Ô][ô])[Ô]
cnx.Execute (SQL)
limpa
End Sub
Private Sub cmdSeguinte_Click()
rst.MoveNext
If Not (rst.BOF = True Or rst.EOF = True) Then
carrega
Else
MsgBox ([Ô]Chegou ao fim dos registos[Ô]), vbInformation, [Ô]Atenção[Ô]
End If
End Sub
Private Sub Form_Load()
cnx.ConnectionString = [Ô]provider=Microsoft.jet.oledb.4.0; Data source = C:\Users\daddy\Desktop stConnVb.mdb[Ô]
cnx.Open
rst.Open [Ô]tblTab1[Ô], cnx, adOpenKeyset, adLockOptimistic
rst.MoveLast
carrega
End Sub
Sub limpa()
txtCamp1 = Empty
txtCamp2 = Empty
End Sub
Um bom ano, obrigado.
Faça seu login para responder