Access: Rotina para introdução de dados

fullshape

Membro
Olá a todos!
Venho pedir a vossa ajuda para encontrar uma solução para um problema com que me ando a debater.
Numa base de dados em Access 2007 tenho duas tabelas com uma relação 'one-to-many'. No 'one' side, quando introduzo um novo registo, um dos campos (chamemos-lhe Numero_Entradas) tem um valor de 1 a 3. O que pretendo fazer é ser automaticamente forçado a preencher 1, 2 ou 3 campos no 'many' side, consoante o que o campo Numero_Entradas indica, ao criar este novo registo no 'one' side.
Alguém tem alguma sugestão?
Muito obrigado e cumprimentos
 
O Procedimento pode ser assim:

Código:
Public Sub CriarRegistoComEntradas(ID_Registo, Num_Entradas As Integer)
    If Num_Entradas < 1 Or num - entradas > 3 Then Exit Sub
 
    Dim rst1 As Recordset, rst2 As Recordset, I As Integer
 
    Set rst1 = Application.CurrentDb.OpenRecordset("Tabela1")
 
    rst1.AddNew
    rst1!ID = ID_Registo ' ou outro campo com a chave primaria    
    rst1!Numero_Entradas = Num_Entradas 
    rst1.Update
 
    Set rst2 = Application.CurrentDb.OpenRecordset("Tabela2")
    For I = 1 To Num_Entradas
        rst2.AddNew
        rst2!ID_ref = ID_Registo ' ou outro campo com a chave estrangeira
        rst2.Update
    Next I
 
End Sub

E deve ser chamado com os dois parametros a partir do click num botão de um formulário.
 
Em primeiro lugar muito obrigado pela resposta!
Ainda não consegui pôr a funcionar. A verdade é que tenho muito pouca experiência no Access, e portanto pode ser falta de jeito.

Criei um botão no formulário para criar o registo no 'one' side, e nas Properties, Event, On Click escolhi [Event Procedure]. Experimentei sem argumentos e só com uma MsgBox para ver se a subrotina era chamada e funcionou. Depois adicionei apenas o argumento Num_Entradas As Integer, e ao carregar no botão recebo o seguinte erro:
procedure declaration does not match description of event or procedure having the same name

Estou a fazer alguma coisa mal?
Uma vez mais obrigado
 
Implementar funcionalidades deste tipo requer conhecimento de VBA, caso contrario será como dar um tiro no escuro.

O procedimento que postei é básico e deve ser adaptado para as tuas tabelas e os parametros podem ser substituidos por valores de caixas de texto ou inputboxes.


Agora esse erro tem a ver com a declaração do evento do botão.

Tipicamente se o nome (não o texto) do botão for btnAdd, o evento por defeito é btnAdd_Click() e não o nome do procedimento que indiquei.

Básicamente é assim:


Código:
Private Sub btnAdd_Click() 
 
      CriarRegistoComEntradas "ID001",3
 
      'código para mostrar os novos registo, etc...
 
End Sub

Depois ainda falta verificar se é ou não possivel crirar um novo registo. A chave primaria não pode repetir!
 
O nome da subrotina está certo, tanto que mostrou a MsgBox. Quando carrego no botão que está no form, a MsgBox aparece com a mensagem que escrevi. O códio é o seguinte:
Código:
Private Sub NewReg_Click()
[INDENT]MsgBox ("olá")
[/INDENT]End Sub

Quanto tento passar para dentro da subrotina uma variável do formulário, como Numero_Entradas As Interger, ou Nome_Entrada (é a PK, um campo de texto) é que me aparece o erro:
Código:
Private Sub NewReg_Click(Nome_Entrada)
[INDENT]MsgBox ("olá")
[/INDENT]End Sub

É a única alteração que faço de ao código de cima, que está a funcionar.
Há alguma coisa em especial sobre declaração de variáveis do formulário na subrotina que deva saber?

Obrigado
 
O que você estava a fazer era colocar um parametro no procedimento do evento, o qual não pode ter parametros. Dai o erro que lhe dava.
Por isso indiquei o modo correto de fazer a chamada.
 
Back
Topo