Vamos lá:
tabela:
EmprestimoIDEmprestimo
DataEmprestimo
Nome
tabela:
detEmprestimoIDdetEmprestimo
IDEmprestimo
CodProduto
QuantEmprestada
tabela:
detEmprestimoTempIDdetEmprestimo
IDEmprestimo
CodProduto
QuantEmprestada
Form: Emprestimo
Subform: detEmprestimo
Estes formulários não são vinculados (escolhi assim para poder cancelar todo o processo, se quiser).
No caso do subform a única solução seria criar uma tabela temporária para armazenar os dados e somente depois que eu desse OK jogaria na tabela original.
Então o processo ficou assim:
- Ao Abrir o Form excluo a tabela detEmprestimoTemp, caso ela exista;
- Depois que eu preencher o Nome os dados são gravados num novo registro na tabela Emprestimo;
- É criada a tabela temporária detEmprestimoTemp;
- Tanto o subform quanto os campos são vinculados a tabela detEmprestimoTemp;
- Depois que eu preencher CodProduto e QuantEmprestada para quantos registros eu quiser, e depois que clicar em OK...
- os dados são gravados na tabela original detEmprestimo via INSERT INTO detEmprestimo (...) SELECT ...
É isso ai galera.
Se der pra melhorar este código, aceito sugestões.
- Código:
Option Compare Database
Option Explicit
Dim ctl As Control
Private Sub Form_Load()
ExcluirTabelaTemp ("detEmprestimoTemp")
End Sub
Private Function Actions(ByVal pg As Integer) As Boolean
On Error GoTo Err_Actions
Set ctl = Forms!Emprestimo!EmprestimoSubform
Dim intMaxID As Integer
Select Case IndicePaginaAtual
Case 0
If Me.Nome <> "" Then
GravarDadosEmprestimo
CriarTabela
VinculaCampos
Actions = True
Else
Me.Nome.SetFocus
Actions = False
End If
Case Else
intMaxID = DMax("IDEmprestimo", "Emprestimo")
GravarDadosdetEmprestimo (intMaxID)
Actions = True
End Select
Exit_Actions:
Exit Function
Err_Actions:
MsgBox "Actions: " & Err.Description & vbCrLf & Err.HelpContext & vbCrLf & Err.HelpFile
Resume Exit_Actions
End Function
Private Sub GravarDadosEmprestimo()
Dim sql As String
sql = "INSERT INTO Emprestimo (Nome) VALUES ('" & Me.Nome & "');"
CurrentDb.Execute sql, dbFailOnError
End Sub
Private Sub CriarTabela()
Dim sql As String
sql = "CREATE TABLE detEmprestimoTemp (IDdetEmprestimo Integer, IDEmprestimo Integer, CodProduto Integer, QuantEmprestada Integer);"
CurrentDb.Execute sql, dbFailOnError
End Sub
Private Sub VinculaCampos()
Dim sql As String
sql = "SELECT * FROM detEmprestimoTemp;"
'Define a Fonte de Registro do subform
ctl.Form.RecordSource = sql
'Define a Fonte de Controle dos registros
ctl!CodProduto.ControlSource = "CodProduto"
ctl!QuantEmprestada.ControlSource = "QuantEmprestada"
End Sub
Private Sub GravarDadosdetEmprestimo(intMaxID As Integer)
Dim sql As String
sql = "INSERT INTO detEmprestimo (IDEmprestimo, CodProduto, QuantEmprestada)" _
& " SELECT " & intMaxID & ", CodProduto, QuantEmprestada" _
& " FROM detEmprestimoTemp;"
CurrentDb.Execute sql, dbFailOnError
MsgBox "Dados gravados com sucesso.", vbOKOnly, "Aviso"
End Sub
Private Sub ExcluirTabelaTemp(strTabela As String)
On Error Resume Next
DoCmd.DeleteObject acTable, strTabela
End Sub