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

Come posso fare per duplicare un record di una tabella e fare in modo che il
contatore (formato testo) si autoincrementi magari il tutto in seguito
all'evento "Su Clic" di un pulsante?
ringrazio tutti per l'aiuto
Mauro

 ha scritto nel messaggio
news:29D37.6267$Pv.2...@news.infostrada.it...

Qualche precisazione:
1) Il contatore č chiave primaria della tabella?
2) quando inserisci un nuovo record nella tabella, come determini il valore
di questo contatore?
3) come determini il record che vuoi duplicare?
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Roberto in campagna ha scritto nel messaggio ...

1)Sģ il contatore č chiave primaria
2)I nuovi record vengono inseriti utilizzando una maschera e il campo
contatore viene incrementato da una formula (presa dal sito comune) situata
nel "ValorePredefinito" del controllo.
3)Per determinare i record che voglio duplicare utilizzo una form che
richiama il record prescelto; nella maschera seguente vengono visualizzate
tutte le informazioni del record ed anche, in una sottomaschera, tutti gli
altri "sottorecord" che mi interessa duplicare.
Praticamente ci sono due tabelle collegate dalla relazione uno a molti ed a
me interesserebbe duplicare sia i dati di una che dell'altra. Nella prima
tabella ho:
IdContatore: chiave primaria duplicati non ammessi(punto 2 sopra); nella
seconda tabella ho: IdContatore1, chiave primaria duplicati non ammessi;
IdContatore2=al contatore della prima tabella, ma chiaramente i duplicati
vengono ammessi(relazione uno a molti).
Ho trovato un aiuto sul sito di Microsoft (Knowledge base su Access 2000),
l'aiuto č quello che corrisponde al codice Q208824, ma chiaramente mi dą
errore nel momento in cui eseguo il comando, in quanto non č possibile avere
due chiavi primarie identiche.
Spero di essere stato abbastanza chiaro.
Ciao Mauro


Potrei darti una mano a realizzare ciò che ti serve, però mi sembra di aver
capito che tu usi A2000 e quindi di default fai riferimento alle librerie
ADO, che io non conosco, uso solo A97 e quindi sono capace solo a far
riferimento alle librerie DAO.
Se comunque ti interessa (potresti aggiungere ai riferimenti del tuo
database anche le librerie DAO), posta la struttura completa delle due
tabelle e la formula che hai scritto nel Valore predefinito di IdContatore;
precisa inoltre se i record li devi copiare nelle medesime tabelle o in
altre due tabelle.



La tabella1 con il contatore dal lato uno è la seguente:
IdContatore    Contatore
Cliente            Testo
Agente            Testo
Riferimento    Testo
La tabella2 dal lato molti
IdConta1    Contatore
IdContatore    (Testo)-uguale a quello di tabella 1
Materiale     Testo
Costo            Intero Lungo
La struttura mi serve per creare preventivi, quindi di un preventivo
(IdContatore) posso avere n materiali.
Il codice per l'IdContatore (quello preso dal sito comune) è inserito in una
casella di testo all'opzione "Valore Predefinito":
="PR" & Format(Date();"aa") & "-" &
Format(IIf(IsNull(DMax("IdContatore";"Tabella1";"IdContatore like 'PR" &
Format(Date();"aa") &
"-????'"));1;Right(DMax("IdContatore";"Tabella1";"IdContatore like 'PR" &
Format(Date();"aa") & "-????'");4)+1);"0000")
Quindi il mio scopo è quello di duplicare (nelle stesse tabelle) sia i
record di Tabella1 che di Tabella2
Spero di averti chiarito la situazione
Ciao Mauro

 Ciao Mauro
Fermo restando che do per scontato che il campo IdContatore di Tabella1 sia
di tipo Testo e non di tipo Contatore.
Se nella maschera principale in cui visualizzi il record da duplicare, il
controllo che è associato al campo IdContatore della Tabella1 si chiama
anche lui IdContatore.
A fronte dell'evento "Su clic" del pulsante di comando che hai inserito
nella maschera principale che visualizza il record da duplicare genera il
seguente codice VBA:
Dim rstTab1 As Recordset
Dim rstTab2 As Recordset
Dim rstTab1bis As Recordset
Dim rstTab2bis As Recordset
Dim MioContatore As String
Set rstTab1 = CurrentDb.OpenRecordset("Tabella1")
Set rstTab2 = CurrentDb.OpenRecordset("Tabella2")
Set rstTab1bis = CurrentDb.OpenRecordset("Tabella1")
Set rstTab2bis = CurrentDb.OpenRecordset("Tabella2")
rstTab1.MoveFirst
Do Until rstTab1.EOF
  If rstTab1!IdContatore = Me!IdContatore Then
    MioContatore = "PR" & Format(Date, "yy") & "-" & _
    Format(IIf(IsNull(DMax("IdContatore", "Tabella1", _
    "IdContatore Like 'PR" & _
    Format(Date, "yy") & "-????'")), 1, _
    Right(DMax("IdContatore", "Tabella1", _
    "IdContatore Like 'PR" & Format(Date, "yy") & _
    "-????'"), 4) + 1), "0000")
    rstTab1bis.AddNew
    rstTab1bis!IdContatore = MioContatore
    rstTab1bis!Cliente = rstTab1!Cliente
    rstTab1bis!Agente = rstTab1!Agente
    rstTab1bis!Riferimento = rstTab1!Riferimento
    rstTab1bis.Update
    rstTab2.MoveFirst
    Do Until rstTab2.EOF
      If rstTab2!IdContatore = rstTab1!IdContatore Then
        rstTab2bis.AddNew
        rstTab2bis!IdContatore = MioContatore
        rstTab2bis!Materiale = rstTab2!Materiale
        rstTab2bis!Costo = rstTab2!Costo
        rstTab2bis.Update
      End If
      rstTab2.MoveNext
    Loop
    Set rstTab1 = Nothing
    Set rstTab2 = Nothing
    Set rstTab1bis = Nothing
    Set rstTab2bis = Nothing
    Exit Sub
  End If
  rstTab1.MoveNext
Loop
Ti ricordo che tutto ciò è scritto per A97 e presuppone quindi i riferimenti
alle librerie DAO.
Prova e facci sapere.


 ha scritto nel messaggio
news:9iut4v$21r0$1...@stargate1.inet.it...

Funziona tutto!
Grazie mille per l'aiuto. L'unica cosa è che ho dovuto, nei Riferimenti,
aumentare la priorità delle librerie DAO altrimenti non ne voleva sapere di
andare.
Grazie di nuovo
Mauro

 Mauro
