Newsgroup: it.comp.appl.access
Titolo: aiuto su come duplicare un form principale e i suoi record di  dettaglio di sottomaschera

Salve a tutto l'NG.
Ho utilizzato  il codice fornito dalla pagina web 
http://support.microsoft.com/kb/208824/it
di microsoft per duplicare un record di una form e i record di
dettaglio della sottomaschera.
Il codice applicato ad un pulsante della maschera è:
Private Sub btnDuplicate_Click ()
Dim dbs As DAO.Database, Rst As DAO.Recordset
Dim F As Form
' Return Database variable pointing to current database.
Set dbs = CurrentDb
Set Rst = Me.RecordsetClone
On Error GoTo Err_btnDuplicate_Click
' Tag property to be used later by the append query.
Me.Tag = Me![OrderID]
' Add new record to end of Recordset object.
With Rst
   .AddNew
      !CustomerID = Me!CustomerID
      !EmployeeID = Me!EmployeeID
      !OrderDate = Me!OrderDate
      !RequiredDate = Me!RequiredDate
      !ShippedDate = Me!ShippedDate
      !ShipVia = Me!ShipVia
      !Freight = Me!Freight
      !ShipName = Me!ShipName
      !ShipAddress = Me!ShipAddress
      !ShipCity = Me!ShipCity
      !ShipRegion = Me!ShipRegion
      !ShipPostalCode = Me!ShipPostalCode
      !ShipCountry = Me!ShipCountry
   .Update                     ' Save changes.
   .Move 0, .LastModified
End With
Me.Bookmark = Rst.Bookmark
' Run the Duplicate Order Details append query which selects all
' detail records that have the OrderID stored in the form's
' Tag property and appends them back to the detail table with
' the OrderID of the duplicated main form record.
DoCmd.SetWarnings False
DoCmd.OpenQuery "Duplicate Order Details"
DoCmd.SetWarnings True
'Requery the subform to display the newly appended records.
Me![Orders Subform].Requery
Exit_btnduplicate_Click:
Exit Sub
Err_btnDuplicate_Click:
MsgBox Error$
Resume Exit_btnduplicate_Click:
End Sub
Ho sostituito i nomi dei controlli e al controllo chiave ho applicato
la formula per incrementarlo di una unità, e l'ho applicato ad una
form che non avesse sottomaschere. Ho quindi eliminato :
DoCmd.OpenQuery "Duplicate Order Details"
e poi ho eliminato
'Requery the subform to display the newly appended records.
Me![Orders Subform].Requery
Risultato: funziona perfettamente.
Ora devo applicarlo alla maschera frmfatture con sottomaschera
"sottomaschera righe fattura".
Ho applicato il codice su descritto senza eliminare niente ma
cambiando i nomi dei controlli.
Ho seguito la procedura descritta nella pagina web ma quando sono
arrivato al punto 11:
"Eliminare IDOrdine della riga Accoda della colonna IDOrdine e
digitare la seguente riga nella riga Criteri:
[Moduli ! . [gli ordini] [il tag]
Questi criteri selezionano i record di dettaglio dove è l' IDOrdine il
valore da ricercarsi nella proprietà Tag, l'origine IDOrdine, della
maschera Orders. ""
mi sono bloccato sulla riga "   [Moduli ! . [gli ordini] [il tag]
"
Cosa devo sostituire?
Grazie in anticipo per le risposte.
Ciao.
Giuseppe.

 ha scritto nel messaggio 
news:e573bfbd-a7ff-4a42...@d42g2000prb.googlegroups.com...


On Error GoTo Err_btnDuplicate_Click





Exit_btnduplicate_Click:
Exit Sub


Non so se usi i Tag nelle maschere...mmm...non credo se fai questa 
domanda...
Ma per duplicare i record correlati al tuo ordine avrai sicuramente nella 
tabella dettagliordini un campo che richiama l'IDOrdine
Nel codice richiama quello...appunto Me![OrderID]
Ti serve per filtrare i record da duplicare.
Tenta di capire il codice, non sostituire barbaramente se no non imparerai e 
ad ogni minima modifica ti ritroverai al punto iniziale.
Ciao
-- 
Roberto da Parma 

 ad ogni minima modifica ti ritroverai al punto iniziale.
Non credo di aver sostituito/modificato il codice tant'è che almeno il
record della form comunque me lo duplica. Credo che se avessi fatto la
prova nel file NorthWind, come dice Microsoft, proprio per quella riga
non sarei riuscito a duplicare anche i record della sottomaschera.
Grazie Roberto. Aspetto una tua risposta. Io faccio i miei tentativi.
Ciao.


Per segnalare che come previsto, ho fatto il tentativo sul file
Northwind in italiano, ed ho raggiunto lo stesso risultato. Mi genera
il duplicato del record fatture ma non dei record presenti nella
sottomaschera.
Cosa devo scrivere al posto di " [Moduli ! . [gli ordini] [il tag]
" ??
Grazie. Ciao.
Giuseppe.

 ha scritto nel messaggio 
news:73edc41c-4497-4b5a...@g17g2000prg.googlegroups.com...


[Forms]![Orders].[Tag]
è un errore della traduzione automatica.
Ciao
Daniele 

 ha scritto nel messaggionews:73edc41c-4497-4b5a...@g17g2000prg.googlegroups.com...

Ciao Daniele. Grazie per la risposta.
Ho messo nei criteri della colonna "Id"  (è la mia chiave primaria
della tabella tblfatture che corrisponde alla chiave della tabella
"tblrghefattura") nella query di accodamento  la seguente riga  come
da te indicato   [Forms]![frmFatture].[Tag]  ma ancora mi duplica solo
il record della tabella tblfatture.
Forse il problema ora è il tag? Prima della modifica da te suggerita
avevo messo [Forms]![frmFatture].[Id] ma niente.
Cosa che c'è non va?
Ciao.


Contrordine!
Allora Daniele ora mi duplica anche i record della sottomaschera con
uguale numero di chiave.
Ora il problema è che la sottomaschera e collegata oltre che
dall'IdAzienda dal numero fattura (che è in formato testo).
Quando duplica il record della tabella fatture il campo NFattura viene
incrementato di una unità; nella tabella tblrighefattura i record
invece vengono duplicati mantenendo il numero fattura del record
duplicato. Questo non mi permette di agganciare al record fattura i
record della sottomaschera. Come faccio a far incrementare il numero
fattura di una unità anche per i record della sottomaschera??
Un ultimo sforzo e ci siamo.
Ciao e ancora grazie.
Giuseppe.


Tentativo successivo non riuscito.
Nel codice su click del pulsante duplica
' Tag property to be used later by the append query.
Me.Tag = Me![ID]
ho aggiunto sotto
Me.Tag = Me![NFattura]
Nella query di accodamento ho ripetuto la stessa procedura per
duplicare la chiave cioè:
ho eliminato NFattura dalla riga Accoda della colonna NFattura e ho
digitato la seguente riga nei criteri [Forms]![frmOrdini]![tag]
ho creato una colonna simile alla nuoca colonna x ID
NuovoOrdineNFattura: CLng([Forms]![frmFatture]![NFattura]) e nella
riga accoda ho messo NFattura.
Con questa procedura torno al punto di prima, mi duplica solo il
record della fattura e non anche quelli della sottomaschera.
E' sbagliato il codice
Me.Tag = Me![ID]
Me.Tag = Me![NFattura]
o la query di accodamento?
Ciao.


Ho fatto un grosso passo avanti, resta un'ultimo problema.
Ho risolto l'incremento del numero di fattura nella query di
accodamento creando un campo così:
NFattura: NFattura:
Format(IIf(IsNull(DMax("[NFattura]";"[tblFatture]";"[IDAzienda]= " &
[Forms]![frmFatture]![IDAzienda] & " AND [NFattura]like '???/" &
Format([Date];"yy") & "'"));
1;Mid(DMax("[NFattura]";"[tblFatture]";"[IDAzienda]= " & [Forms]!
[frmFatture]![IDAzienda] & " AND [NFattura] like '???/" &
Format([Date];"yy") & "'");1;3));"000") & "/" & Format([Date];"yy") e
mettendo nella riga accoda il campo NFattura.
Infatti ora sia il record della tabella fatture che i record della
tabella origine della sottomaschera presente nella maschera di
inserimento fattura vengono duplicati e hanno la stessa chiava e lo
stesso numero di fattura.
Il problema ora è questo:
nel codice attivato su click del pulsante duplica indico che la data
della nuova fattura deve essere quella del sistema, quindi della data
attuale. Prima di riuscire a duplicare i record della sottomaschera,
cioè quando non c'era la formula di cui sopra, andava bene. Ora
invece, quando, pigio il pulsante duplica mi esce un messaggio "Date"
ed il valore inserito sarà quello della nuova fattura. Come posso non
far apparire il messaggio e far attribuire alla nuova fattura la data
del sistema?
Cosa devo cambiare nella formula inserita nella query di accodamento?
Grazie anticipate.
Ciao. Giuseppe.


Ciao a tutto l'NG.
Scusate se riprendo dopo un pò di tempo questo problema, ma per
impegni avevo messo da parte la programmazione del mio software.
Ho provato a sostituire Date con Now ma in fase di esecuzione query mi
appare ul msgbox che mi chiede di inserire una data. Io vorrei che la
data fosse la data odierna così come avviene per la duplicazione del
record relativo alla fattura.
Cosa dovrei cambiare o eliminare? Riporto il codice inserito nella
query di accodamento, sperando nell'aiutino finale:
NFattura: Format(IIf(IsNull(DMax
("[NFattura]";"[tblFatture]";"[IDAzienda]= " & [Forms]![frmFatture]!
[IDAzienda] & " AND [NFattura]like '???/" & Format([Date];"yy") &
"'"));1;Mid(DMax("[NFattura]";"[tblFatture]";"[IDAzienda]= " & [Forms]!
[frmFatture]![IDAzienda] & " AND [NFattura] like '???/" & Format
([Date];"yy") & "'");1;3));"000") & "/" & Format([Date];"yy")
Ciao e grazie anticipate.
Giuseppe.