Newsgroup: it.comp.lang.visual-basic
Titolo: [Principiante] - E' possibile duplicare un recordset con un solo campo differente?

Ciao a tutti,
scusatemi se non mi esprimo correttamente ma ho da poco intrapreso ad usare 
il visual basic.
Ho salvato un set di record con il seguente codice
rsRecordSet.Source = "Select * From DatiTable WHERE Nome = '" & 
NomeImpostato & "' AND NumCl = " & NumImpostato
Ora vorrei inserire nella tabella "DatiTable" lo stesso recordset con tutti 
i campi identici tranne uno e cioè il campo "Nome".
E' possibile?
Forse utilizzando "rsRecordSet.Clone", ma come devo fare per cambiare il 
valore del campo "Nome" e quindi inserire il tutto nella tabella. 
"NomeTable".
Spero ci sia qualcuno che abbia un po' di tempo per aiutarmi sperando che 
per voi il problema sia banale.
Ringrazio tutti.
Lupo 

Che database usi?
E comunque se sai in che modo reperire il record da "clonare" ma di cui
vuoi cambiare un campo, usa la seguente query:
INSERT INTO "NomeTable" (Nome, Campo1, Campo2, ..., CampoN)
SELECT 'Pippo', Campo1, Campo2, ..., CampoN
FROM Tabella_origine
WHERE <condizione>
partendo perň dal presupposto che:
SELECT Campo1, Campo2, ..., CampoN
FROM Tabella_origine
WHERE <condizione>
sia una query che ti restituisce quell'unico record che vuoi duplicare.
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa ;)

 sia una query che ti restituisce quell'unico record che vuoi duplicare.
Ti ringrazio per la risposta.
Provo a spiegarmi meglio:
il database che utilizzo è un MDB. In testa al codice della form ho inserito 
il seguente codice:
Public WithEvents connConnection As ADODB.Connection
Public WithEvents rsRecordSet As ADODB.Recordset
Dim mblnAddMode As Boolean
La seguente query restituisce più record rispondenti alla codizione WHERE e 
non un unico record.
rsRecordSet.Source = "Select * From DatiTable WHERE Nome = '" & 
NomeImpostato & "' AND NumCl = " & NumImpostato
Quello che vorrei fare è reinserire nella stessa tabella, tutti questi 
record con il solo valore del campo "Nome" modificato.
Ho provato a tradurre il tuo suggerimento in questo modo:
INSERT INTO "DatiTable" (Nome) SELECT 'PROVANUOVONOME' FROM DatiTable WHERE 
Nome = '" & NomeImpostato & "' AND NumCl = " & NumImpostato
Ma visual basic mi evidenzia l'intera riga di colore rosso, inoltre non 
capisco il perchè inserire nuovamente la condizione WHERE.
Mi scuso se non uso i termini corretti, è da poco che programmo e spesso mi 
blocco anche nelle piccole cose, spero con un vostro aiuto di riuscire a 
migliorare.
Ciao e grazie.
Lupo 

 record con il solo valore del campo "Nome" modificato.
Setire un "Lupo" che chiede di DB fa una certa impressione (chi sa capirà), 
comunque credo che quello chi ti serva sia una banale UPDATE
UPDATE MyTable SET Nome = 'NuovoValore'
Eventualmente con WHERE, es.
UPDATE MyTable SET Nome = 'Pippo' WHERE Nome = 'Pluto'
Ciao

 Ciao
Quanto tempo è passato....dall'ultima apparizione dell'originale...!
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ma tu vuoi "duplicare" i record che hai già? Oppure vuoi cambiare il
campo "nome" agli stessi?
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...


 campo "nome" agli stessi?
Voglio duplicare i record che ho già, cambiando (solo sulla copia) il valore 
di un determinato campo.
Lupo. 

 UPDATE MyTable SET Nome = 'Pippo' WHERE Nome = 'Pluto'
Probabilmente mi manca qualcosa che per voi è ovvio.
Se un faccio un semplice copia incolla della stringa da te suggerita mi 
viene colorata di rosso e appare l'errore "Errore di compilazione: fine 
istruzione"
A parte questo problema che spero mi aiutate a risolvere, immagino che il 
tuo suggerimento serva a modificare il valore di un campo all'interno di un 
gruppo di record corrispondenti alla condizione WHERE.
Io ho bisogno prima di questa modifica di copiare il gruppo di record in 
modo da non modificare l'originale.
Devo fare una sorta di "Salva con nome..."
Ti ringrazio.
Lupo 

> Quanto tempo č passato....dall'ultima apparizione dell'originale...!
Cosa intendete... C'č qualcosa di strano del mio nome.... Soprannome....
Ciao
Lupo 

 WHERE <condizione>
Sono riuscito con la tua funzione
connConnection.Execute ("INSERT INTO NomeTable (Nome) SELECT 'Pippo' FROM
NomeTable WHERE Nome = '" & Nome & "'")
Tuttavia mi sono accorto che occorre indicare la corrispondenza di tutti i
campi della tabella (che sono più di 50!!!!) altrimenti mi mette il valore
predefinito.
Non esiste un metodo che lascia invariato il valore di tutti i campi tranne
di uno (il campo "Nome").
Per altre informazioni vedi i miei post, più in basso.
Ciao
Lupo

 Lupo. 
E allora se vuoi "duplicare dei record che hai già" pensa in questo
modo: le operazioni da eseguire sono due.
1 - Devi sapere *quali* record vuoi duplicare, quindi devi pensare a una
query che li trovi nell'intera tabella:
SELECT [elencocampi]
FROM tua_tabella
WHERE (condizione)
2 - Inserire nella "tua_tabella" quest record, cambiando però il campo
che vuoi cambiare (scusa il pessimo gioco di parole): supponiamo che tu
voglia cambiare il campo "Nome" e impostarlo a 'PIPPO':
INSERT INTO tua_tabella (Nome, Cognome, Data_nascita, ....)
SELECT 'Pippo', Cognome, Data_nascita, ....
FROM tua_tabella
WHERE (condizione)
In questo modo selezioni una serie di record (eccetto il campo nome che
lo selezioni già con valore fisso 'Pippo') dalla tua tabella
scegliendoli tramite la clausola WHERE. A questo punto i record
selezionati vengono reinseriti nella tua_tabella :)
Se hai più di 50 campi, beh rimboccati le maniche :)



Una volta c'era un Lupo.....
poi il grande spirito lo chiamo' alla guida di un branco piů grande...
Da allora nessuno lupo č apparso nella foresta...solo lupetti!
...e ciň rattrista doppiamente!
Un sorso per lui...ed uno per noi!

Wodka40° wrote:
pur essendo tu libero di chiamarti con il nick che vuoi...ed essendo solo
una richiesta che ti faccio...
e tu liberissimo di non prenderla in considerazione...ed essendo una mia
contestabile iniziativa...
Ti costerebbe tanto cambiare il tuo nick da Lupo a qualcosaltro?
"Lupo grigio" "Lupacchiotto" "Lupo feroce" etc etc etc
Grazie se lo fai!

 ha scritto nel messaggio 
news:wc4Te.30729$hV3....@nntpserver.swip.net...

Visto la gentilezza con cui me lo chiedi (e i vecchi post letti su Lupo in 
questo NG) da oggi mi chiamerň Lupo Nero.
Ciao
Lupo Nero 

> Se hai più di 50 campi, beh rimboccati le maniche :)
Ah.... ecco, questo volevo sapere.
Mi pare di aver capito che l'unica soluzione sia quelli di passagli campo 
dopo campo, sperando di non dover mai modificare la struttura del database.
Va be... vorrà dire che mi rimboccherò le maniche sperando di ricordarmi in 
caso di manutenzione a modificare questa riga di codice lunghissima....
Ciao e grazie.
Lupo Nero 

 database.
No, puoi anche usare l'* (spero di non confondermi con la SELECT INTO come 
al solito) perň cosě fai una copia pari-pari e poi dovrai modificare di 
nuovo i valori dei campi che ti interessano con una UPDATE.
Ciao 

 nuovo i valori dei campi che ti interessano con una UPDATE.
Ma a quel punto hai dei record completamente identici... come fai a
distinguere quale aggiornare e quale lasciare identico?
E ammesso anche l'utilizzo di un contatore per distinguere i record,
come si comporta Access se fai un bel INSERT INTO ... SELECT * FROM ...?
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello...


 Lupo Nero 
Sei un grande :...)
