Newsgroup: it.comp.appl.access
Titolo: Duplicare Records in Form e SubForm

Un saluto a tutto l'NG.
Ho la necessità di duplicare il record presente in una maschera e tutti 
quelli relativi alla sua sottomaschera tramite un pulsante di comando 
per poi fare ventualmente delle modifiche nei contenuti dei vari 
campi.Mi sono avvalso del codice MIcrosoft seguente:
Private Sub Duplica_Click ()
Dim dbs As DAO.Database, Rst As DAO.Recordset
Dim F As Form
Set dbs = CurrentDb
Set Rst = Me.RecordsetClone
On Error GoTo Err_btnDuplicate_Click
Me.Tag = Me![IDPart]
With Rst
    .AddNew
       !PartNumber = Me!PartNumber
       + gli altri campi
    .Update
    .Move 0, .LastModified
End With
Me.Bookmark = Rst.Bookmark
DoCmd.SetWarnings False
DoCmd.OpenQuery "DuplicaPartNumber"
DoCmd.SetWarnings True
Me![DETTAGLIOPART].Requery (sottomaschera)
Exit_Duplica_Click:
Exit Sub
Err_Duplica_Click:
MsgBox Error$
Resume Exit_Duplica_Click:
End Sub
Il problema sta nella costruzione della query di accodamento 
"DuplicaPartNumber", poichè nel inserire il criterio per la chiave 
primaria da duplicare [Moduli !.[Parti][Tag] (così come scritto 
nell'esempio Microsoft), mi dà errore di sintassi e non riesco a capire 
il perchè.
  Qualcuno può aiutarmi o suggerirmi metodi alternativi ?
Grazie, Marco


Ciao Marco, io utilizzo questa procedura per duplicare un record
1) in fase di costruzione della form inserisco nella proprietà TAG del
campo una parola chiave es. DUPLICA
2) nella form aggiungo un pulsante di comando ed aggiungo il seguente
codice all'evento SU CLIC
Private Sub CopiaDatiOfferta_Click()
     Dim Vid As Long
     If NewRecord() Or IsNull(Me!id) Then Exit Sub
       Vid = Me!id
        ' posizionati su nuovo record
        DoCmd.GoToRecord , , acNewRec
        Call CopiaDati(Vid)
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70  ' salva reord
end Sub
3) poi sempre nel modulo della form aggiungi questa function
Function CopiaDati(vId As Long)
On Error Resume Next
    Dim ctl     As Control
    Dim FRM     As Form
    Dim db      As DAO.Database
    Dim RS      As DAO.Recordset
    Dim sql     As String
    Dim vNomeCtl As String
    sql = "SELECT * FROM nomeTabella  WHERE id = " & vId
    Set db = CurrentDb
    Set RS = db.OpenRecordset(sql, 4)
    Set FRM = Me
    With RS
        For Each ctl In FRM
            If ctl.Tag Like "*DUPLICA*" Then
                vNomeCtl = Me(ctl.Name).Name
                Me(vNomeCtl) = .Fields(Me(ctl.Name).Name)
            End If
        Next ctl
    End With
    Set FRM = Nothing
    Set ctl = Nothing
    RS.Close
    Set RS = Nothing
    Set db = Nothing
On Error GoTo 0
End Function

> Private Sub Duplica_Click ()
etc,etc

Grazie per la risposta, ma, se ho interpretato bene il codice, in questo 
modo duplico solo il record della Form principale, mentre devo poter 
accodare anche quelli corrispondenti della SubForm.
Ciao, Marco

 ha scritto nel messaggio 
news:48d104b5$0$41659$4faf...@reader4.news.tin.it...

Dim idOld, idNew as long
idOld = Forms!.....
    Set rstCod = CurrentDb.OpenRecordset("SELECT Max(tbl.ID) AS MaxOfID FROM 
tbl;")
    With rstCod
        .MoveFirst
        idNew= .Fields("MaxOfID")
        .Close
    End With
    idNew= idNew+ 1
Set rstFrom = CurrentDb.OpenRecordset("SELECT tbl.* FROM tbl WHERE tbl.ID = 
" & idOld)
.....
'fai quello che devi fare...cioè duplichi il record master
...
Set rstFrom = CurrentDb.OpenRecordset("SELECT tblDet.* FROM tbl WHERE 
tblDet.IDDet = " & idOld)
....
'qui passi quando accodi il valore IDDet=idNew
...
Ciao
-- 
Roberto da Parma

 
Grazie a tutti,
sto provando tutte le soluzioni da voi consigliate,
in più quella sul sito:> 
http://allenbrowne.com/ser-57.html
"Duplicate the record in form and subform" che mi sembra funzioni molto 
bene.