Newsgroup: it.comp.appl.access
Titolo: duplicare record

buongiorno,
su una maschera ho inserito un pulsante duplica record, e in effetti duplica 
tutti i campi in una nuova maschera, purtroppo la sottomaschera non viene 
duplicata. Come si può procedere affinchè venga duplicata sia maschera che 
sottomaschera?
Grazie
Akery 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

In una relazione 1-M, chiaramente devi prima avere un Record lato 1 e poi puoi inserire il/i Record/s lato Molti...
 
Non esiste una Macro che faccia tutto... devi scrivere in VBA del codice che consenta di Duplicare il Record lato 1
1) Memorizzi la PK del Record da copiare lato 1 come OLDPK
2) Duplichi il Record lato 1
3) Recuperi la NEWPK del record lato 1(farà da FK del Record lato M)
4) Estrai il Record lato M usando come FK=OLDPK, così ricavi i dati da duplicare e li scrivi nella Tabella lato M in addnew, usando la NEWPK come FK...
 
Fatto...
 
@Alex

il principio l'ho capito ma per me è complicato, conosco il VBA in modo 
molto elementare, ci sarebbe qualcosa di più semplice da fare?
Akery
 
 
 
 
"@Alex"  ha scritto nel messaggio 
news:f2b62f76-7e7c-4879...@googlegroups.com...



 Akery
 
Si, eccome... farlo fare a chi lo sa fare...!
 
@Alex

volevo intendere se c'era la possibilità di evitare l'uso di VBA, magari 
utilizzando solo le macro dove sono un po più pratico.
 
"@Alex"  ha scritto nel messaggio 
news:bef16495-b735-475a...@googlegroups.com...



I passaggi che ti ho esposto ti sono chiari...?
 
Abbiamo 2 opzioni:
NO non sono chiari, parliamone ancora.
SI sono chiari, allora non conosci le MACRO.
 
Non si può fare quello che ti ho esposto con MACRO, oltretutto andrebbe rinchiuso in una TRANSAZIONE ad essere tecnici.
 
@Alex


ciao
condivido la soluzione che ho trovato e che sto testando, per ora pare funzionare bene e ne approfitto per chiedere ad Alex di segnalarmi eventuali errori. 
Nel mio caso si tratta di una maschera preventivi con sottomashera da duplicare in una maschera commissioni con sottomaschera.
 
procedo così:
sul pulsante duplica inserisco il seguente codice:
 
[CODE]
Private Sub CmdCrea_Click()
If MsgBox("Vuoi duplicare i dati per creare una Commissione?", vbInformation + vbYesNo, "CONFERMA DUPLICAZIONE DATI") = vbYes Then
 
Dim DBCorrente As DAO.Database
Dim Tabella As DAO.Recordset
Dim Tabella1 As DAO.Recordset
 
'Apro le tabelle origine dati delle maschere 
Set DBCorrente = CurrentDb
Set Tabella = DBCorrente.OpenRecordset("Preventivo", dbOpenDynaset)
Set Tabella1 = DBCorrente.OpenRecordset("Commissione")
 
'Cerco il dato della maschera principale
Tabella.FindFirst "IDpreventivo = " & Me!IDpreventivo
 
'Se non lo trovo non non duplica il dato
If Tabella.NoMatch = False Then
         Tabella1.AddNew
         Tabella1.Fields("IDcommissione") = Tabella1.Fields("IDcommissione")
         Tabella1.Fields("IDclienti") = Tabella.Fields("IDclienti")
         Tabella1.Fields("Categoria") = Tabella.Fields("Categoria")
         Tabella1.Fields("Modello1") = Tabella.Fields("Modello1")
         Tabella1.Fields("Testo1") = Tabella.Fields("Testo1")
         Tabella1.Update
End If
 
'Chiusura tabelle
Tabella.Close
Tabella1.Close
DBCorrente.Close
 
'Apro la query che crea una tabella in cui copia le righe della sottomaschera 
DoCmd.SetWarnings False
DoCmd.OpenQuery "QueryCopiaPerCommissione"
DoCmd.SetWarnings True
 
'apro la maschera
DoCmd.OpenForm "COMMISSIONE", acNormal
 
'apro la query che incolla le righe nella maschera di destinazione
DoCmd.SetWarnings False
DoCmd.OpenQuery "QueryIncollaPerCommissione"
DoCmd.SetWarnings True
 
 
Form_COMMISSIONE.Recalc
 
'chiudo la maschera con il comando duplica i dati
DoCmd.Close acForm, "PREVENTIVO"
End If
End Sub
[\CODE]
 
le Query sono le seguenti:
QueryCopiaPerCommissione
[CODE]
SELECT PreventivoRighe.IDpreventivo, PreventivoRighe.Articolo, PreventivoRighe.Prezzo, PreventivoRighe.Quantità INTO CopiaPerCommissione
FROM PreventivoRighe
WHERE (((PreventivoRighe.IDpreventivo)=[Maschere]![PREVENTIVO]![IDpreventivo]))
ORDER BY PreventivoRighe.IDpreventivo;
 
[\CODE]
 
QueryIncollaPerCommissione
[CODE]
INSERT INTO CommissioneRighe ( IDcommissione, Articolo, Prezzo, Quantità )
SELECT Commissione.IDcommissione, CopiaPerCommissione.Articolo, CopiaPerCommissione.Prezzo, CopiaPerCommissione.Quantità
FROM Commissione, CopiaPerCommissione
WHERE (((Commissione.IDcommissione)=[Maschere]![COMMISSIONE]![IDcommissione]))
ORDER BY Commissione.IDcommissione;
[\CODE]