Newsgroup: it.comp.lang.visual-basic
Titolo: Copia Tabelle

Come si fa copiare 2 tabelle in un db access in vb?
cioč tabella1 --- raggruppata -- copio il risultato nella tabella2 

 tabella1 --- raggruppata -- copio il risultato nella tabella2
Qualcosa tipo?
INSERT INTO tabella2 (campi) SELECT campi FROM tabella2 GROUP BY campi
In SQL standard funziona, non so con access.
-- 
DBMS Firebird
VB6 + Ado


Pensavo usando ADO
la prima tabella ha, per esempio un'anagrafica.
a me servono solo le regioni, quindi faccio una Select con raggruppamento.
Poi devo andare su un'altra tabella (regioni) vedere se la regione c'è 
modificarne la descrizione (so che è stupido ma è un esempio)
se non c'è inserirla.

 se non c'è inserirla.
Credo che l'esempio di Andrea possa funzionare, al massimo aggiungi un
WHERE regione NOT IN (SELECT regione FROM regioni)
Ciao

 se non c'è inserirla.
Allora devi fare in due istruzioni, prima un'update e poi un'insert con
condizioni rispettivamente inverse come ha scritto Fabio.
Ora ad es. firebird non supporta l'update in quel modo (almeno non in
quello rapido), ma per un campo lo fai comunque.
Altrimenti via codice scorri un recordset e di la verifichi se esiste o
meno e fai insert/update, ma è circa un 100naio di volte più lento che
usare due command distinti.
Per farti un esempio la insert come ti ho scritto impiega una frazione di
secondo quando ciclando il recset per fare la stessa cosa si impiega anche
un minuto.



Grazie delle risposte.. Ringrazio qui anche gli altri!!
La lentezza non è un problema, visto il numero di record che dovrà 
eleborare...
Adesso ho solo un'altro problema:
dopo aver aperto un DB .... mi viene creato il corrispondente file .LDB
... come faccio per chiuderlo.
Qual'è l'istruzione?
    Data1.DatabaseName = Connetti_TMP
    '
    sql = "SELECT * from TMPCOMMESSE"
    '
    Data1.RecordSource = sql
    Data1.Refresh
    Come si chiude?
è giusto usare ==>    Data1.Recordset.Close

 è giusto usare ==>    Data1.Recordset.Close
Non conosco la sintassi, usi l'oggetto data?
Comunque ti basta:
Dim ADOCn as ADODB.Connection
Dim AdoRs as ADODB.Recordset
Set ADOCn = New ADODB.Connection
ADOCn.ConnectionString = <tua connessione al DB> (OLEDB ecc.)
ADOCn.Open
Set AdoRs = New ADODB.Recordset
Set AdoRs.ActiveConnection = ADOCn
Adors.Source "stringa  SQL"
Adors.Open
do Until Adors.EOF
	'quello che vuoi
	adors.movenext
Loop
adors.Close
Set Adors.ActiveConnection= Nothing
Set Adors=Nothing
Adocn.Close
Set Adocn=nothing



Il file .ldb viene creato dal jet engine di access e contiene alcune 
informazioni sui lock dell'.mdb.
Quando tutte le connessioni all'mdb sono chiuse il jet cancella anche il 
file.
Se usi gli oggetti data (il che non è il massimo) la connessione viene 
chiusa quando l'oggetto è distrutto, cioè alla chiusura del form, a meno che 
non ricorri a trucchetti non molto puliti come quello che hai indicato tu.
Ti conviene lasciare l'oggetto data disconnesso, cioè senza parametri per la 
connessione e crearti una connessione e un recordset da codice e assegnarlo 
al data.
Se non ti serve l'oggetto data per scorrere il recordset puoi anche 
eliminarlo e collegare il recordset direttamente a griglie varie.
Ciao