Newsgroup: it.comp.appl.access
Titolo: come duplico un record ma solo con i campi che voglio io?

Buon pomeriggio!
mi servirebbe un pulsante che mi duplichi parzialmente un record.
intendo dire... se il record originale è:
codide_id autore casa_editrice titolo
5         Manzoni   libroland  access per balenghi
il record duplicato sarà
codide_id autore casa_editrice titolo
06        Manzoni   libroland  word per galline
in pratica l'id ovviamente continua ad essere un contatore automatico,
autore e casa editrice sono le stesse ma il titolo cambia.
premendo il pulsante si aprirà una maschera che mostrerà i campi ID autore
e casa editrice valorizzati. Titolo invece dovrà essere scritto a manina.
Niente inputbox (se è così che si chiamano).
L'idea di fondo è: duplico alcuni dati, e per i campi vuoti ci sarà una
formattazione condizionale per cui la cella sarà rosso fuoco...
grazie!!!! ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 grazie!!!! ciao.
Dimenticato... il record duplicato è sulla stessa tabella.
ciao



Apri un RS1(ReadOnly) basato sul Record prescelto e fai un ADDNEW nel
RS2(in scrittura sulla tabella) e cicli la collection Fields
dell'Oggetto RS1 assegnadoli a quelli della collection di RS2
escludendo la PK, se è
un Counter fai senza fare nulla, se non lo è devi generare tu una PK
appropriata...!
Una cosa semplicissima tipo questa:
Function DuplicaREC(Id as Long, TBName as String)
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim fld  As DAO.Field
Set rs1=DbEngine(0)(0).OpenRecordset("SELECT * FROM " & TBName & "
WHERE ID=" & Id,dbOpenDynaset, dbReadOnly)
Set rs2=DbEngine(0)(0).OpenRecordset(TBName,dbOpenDynaset)
Rs2.AddNew
For each fld in RS2.Fields
    If fld.Name="ID_PK" Then
       ' se è Counter non fai nulla se no chiami la funzione per
generare la PK
    Else
       fld.Value=rs1.Fields(fld.Name).Value
    End If
Next
Rs2.Update
rs1.Close
rs2.Close
Set rs1=Nothing
Set Rs2=nothing
End Function
Metti tu la gestione errori fatta a dovere...
Ciao
@Alex

 @Alex
Usti... speravo in una roba più semplice...
e creare una macro che applica una query che conterrà i campi che mi
interessano? quindi selezionando il record corretto che mi interessa mi
duplicherà solo idati che voglio...
..dimenticavo... grazie
ciao
a.


 a.
Prova pure come credi.
@Alex

 - Mostra testo citato -
oppure:
crei una prima maschera chiamata Maschera1 con origine record dalla
tabella che chiamerò Tabella1 ed una seconda maschera che chiamerò
Maschera2 sempre con origine record da Tabella1.
In struttura della Maschera1, a fianco del record inserisci un
pulsante che conterrà al suo clic la seguente routine:
Dim ss As DAO.Recordset
Set ss = CurrentDb.OpenRecordset("Tua_Tabella")
ss.AddNew
ss!autore = Me.autore
ss!casa_editrice = Me.casa_editrice
ss.Update
ss.Close
Set ss = Nothing
DoCmd.Close
DoCmd.OpenForm "Maschera2"
If CurrentProject.AllForms("Maschera2").IsLoaded = True Then
   DoCmd.GoToRecord , , acLast
End If
Modifica Tabella1 con il nome vero della tua tabella, Maschera1 e
Maschera2 con il nome vero delle due maschere che andrai a crearti.
ps
Non metterti paura dei suggerimenti di @Alex, è il classico professore
preparato che non inviteresti mai a cena :-)
Ciao Vladimiro.

 Ciao Vladimiro.
Ciao Vladimiro, vorrà dire che non ti invito a cena.
@Alex

 Ciao Vladimiro, vorrà dire che non ti invito
non ci credo :-)
 > @Alex
Ciao Vladimiro.

 Ciao Vladimiro.
Vi ringrazio...
ho avuto un altro suggerimento che è più alla mia portata:
su evento click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 
DoCmd.DoMenuItem acFormBar, acEditMenu, 2, , acMenuVer70 
DoCmd.DoMenuItem acFormBar, acEditMenu, 5, , acMenuVer70 
[campo1]= Null 
[campo2]= Null 
...
e i campi indicati restano vuoti...
a me sembra funzionare...
fa esattamente la stessa cosa di ciò che avete scritto voi?


 fa esattamente la stessa cosa di ci che avete scritto voi?
Se soddisfa la tua richiesta direi che va bene.
Personalmente non userei mai... ma questo è un'altra cosa.
@Alex