Newsgroup: it.comp.www.asp
Titolo: Copiare il contenuto di una tabella in un'altra

Salve a tutti, vorrei copiare il contenuto di una tabella in un'altra nello
stesso db. Premetto che ho girato tutti i post dell'ng e gli script di
aspitalia ma non ho trovato qualcosa che mi aiuti in questo senso (sono
principiante). Forse mi è sfuggito...non lo so. Qualcuno  può aiutarmi a
capire come fare? Grazie
Danilo

aspitalia ma non ho trovato qualcosa che mi aiuti in questo senso (sono
ma vedi, non è che cercando nei post o negli script dei siti troverai
mai qualcosa descritto come "copiare il contenuto da una tabella
all'altra"...
troverai diversi metodi per fare operazioni basilari che poi starà a
te capire come assemblare per fare quello che ti serve.
voglio dire, potrai trovare informazioni su come riferirsi al
contenuto di una tabella e scorrerlo, con dei cosi che si chiamano
recordset, e come scrivere qualcosa dentro un recordset, poi troverai
informazioni su un linguaggio molto ultile che si chiama sql e che
serve a filtrare, modificare e creare tabelle...
cioè qualsiasi strumento di programmazione è una scatola di meccano, o
di lego.  quando ero piccolo io, diciamo 25-30 anni fa, del meccano si
compravano i pezzi sfusi, i bulloni, le aste forate, i pannelli... e
più o meno per i lego era la stessa cosa...  non è che uno andava lì e
diceva "mi serve una macchinina così e così", diceva "mi dai tot aste,
tot bulloni, tot pannelli, un motore elettrico" e se la montava.
ed è *meglio* che sia così.  adesso il meccano non lo vedo più e vedo
che i lego vengono in scatole dove è già stabilito quello che ci puoi
fare... bella soddisfazione!  ti devi accontentare solo di quello che
qualcuno ha deciso che a te piacerà montare coi lego.  se vuoi farti
qualcos'altro non puoi.
con un linguaggio di programmazione sarebbe forse più facile avere
ricette già pronte, ma sarebbe impossibile prevedere le necessità e i
desideri di tutti, sicché avremmo strumenti più limitati e meno utili.
dopo tutta 'sta pappardella veniamo al tuo caso.
ci sono molti modi di farlo (e questa è un'altra legge
dell'informatica che a volte rende difficile aiutare un principiante,
perché se vuoi essere utile devi spiegargli *tutti* i sistemi ed
evidenziargli pro e contro...).
il modo più "facile" (diciamo più svelto) sarebbe quello di eseguire
una bella query sql del tipo:
SELECT * INTO NuovaTabella FROM VecchiaTabella
che vuol dire "prendi tutti i record di VecchiaTabella, crea una nuova
tabella di nome NuovaTabella o se esiste sovrascrivila e ficcaci
dentro i record di VecchiaTabella"
per fare ciò dovresti saper eseguire una query sql in uno script asp.
è facile, basta farlo fare alla connessione:
dim cn
dim ssql
set cn = server.createobject(adodb.connection") 
ssql = "SELECT * INTO NuovaTabella FROM VecchiaTabella"
cn.execute ssql
cn.close
set cn = nothing
in questo modo però, come ti dicevo, se NuovaTabella esiste già, viene
prima cancellata.
se vuoi *accodare* i record di VecchiaTabella a NuovaTabella, la query
sql da eseguire è questa:
INSERT INTO NuovaTabella SELECT * FROM VecchiaTabella
(supponiamo che la struttura delle due tabelle sia identica, o meglio,
che NuovaTabella contenga almeno tutti i campi di VecchiaTabella e che
siano dello stesso tipo).
puoi anche accodare i record uno per uno, sia eseguendo una query sql
record per record che utilizzando i recordset:
dim rstN
dim rstV
dim fld
[setti rstN sulla nuova tabella e rstV sulla vecchia]
do until rstV.eof
   rstN.addnew
   for each fld in rstN(fields)
      rstN(
fld.name
) = rstV(
fld.name
)
   next
   rstN.update
   rstV.movenext
loop
questo metodo è più lento dell'eseguire un'unica query, anche se per
poche centinaia di record non te ne dovresti nemmeno accorgere.
di nuovo parto dal presupposto che NuovaTabella e VecchiaTabella siano
simili.
se non lo sono:
do until rstV.eof
   rstN.addnew
   rstN("campo1") = rstV("campoA")
   rstN("campo2") = rstV("campoB")
   [...]
   rstN.update
   rstV.movenext
loop
-- 
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport

:-))))) Non ho parole...ti ringrazio molto.
Lo so, hai ragione...anche se quello che dici di fare è più facile a dirsi
che a farsi :-) (almeno... per me!)
Farò tesoro del tuo consiglio. Thank You...
Danilo

che a farsi :-) (almeno... per me!)
l'importante è procedere per gradi...  prima metti insieme due pezzi,
poi tre, poi quattro e alla fine fai quello che vuoi.
ah, negli esempi che ti ho fatto ho dimenticato di settare la
connessione, che è una cosa per nulla banale, ma la trovi in tutti i
manuali e siti vari.
