Newsgroup: it.comp.appl.access
Titolo: creare una tabella da un recordset

Riporto di seguito il codice (funzionante) che ho pensato per creare
una tabella nel mio db (access), tabella coincidente esattamente con un
recordset generato tramite connessione ad un db remoto (db remoto è
interbase - .gdb):
   Dim tempSpe As ADODB.Recordset
   Dim con As ADODB.Connection
   Dim db As DAO.Database
   Dim tb As DAO.Recordset
   Dim j As Long
   Dim k As Long
   Set con = New ADODB.Connection
   Set tempSpe = New ADODB.Recordset
   Set db = CurrentDb
   con.Open "dsn=dbdati", "test", "test"
   tempSpe.Open "select * from tb1", con
   Set tb = db.OpenRecordset("select * from tb1_copy")  'tb1_copy
esiste ed è vuota
   k = tempSpe.Fields.Count
   Do
    tb.AddNew
       For j = 0 To k - 1
          tb.Fields(j) = tempSpe.Fields(j)
       Next
       tempSpe.MoveNext
    tb.Update
   Loop Until tempSpe.EOF
   tempSpe.Close
   con.Close
   tb.Close
   db.Close
La procedura è funzionante, ma il tempo di riposta non è proprio il
massimo.
Il pezzo di codice che non mi convince è il ciclo di for. Passo alla
domande:
1) esite la possibilità di usare un comando che mi accodi l'intero
record senza usare un for per passare tra i vari campi?
2) se creo una tabella collegata a tb1 e creo una query di accodamento
da tb1 a tb1_copy, avviando tale query da codice tramite :
DoCmd.Openquery("accoda_tb1") ottengo tempi decisamente migliori.
Qualcuno può spiegarmi il motivo, suggerendomi quindi il modo migliore
di lavorare per eseguire operazioni di "copia e incolla" da un db
remoto (non access) ad un db in locale (access) ?
grazie 
mdm

 ha scritto nel messaggio news:1149092194.3...@j55g2000cwa.googlegroups.com...






   k = tempSpe.Fields.Count

   tempSpe.Close
   con.Close
   tb.Close
   db.Close



grazie
mdm
[risposta]
Non ho capito perché non utilizzi la query di accodamento...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio
Riporto di seguito il codice (funzionante) che ho pensato per creare
    -CUT-
La procedura è funzionante, ma il tempo di riposta non è proprio il
massimo.
Il pezzo di codice che non mi convince è il ciclo di for. Passo alla
domande:
1) esite la possibilità di usare un comando che mi accodi l'intero
record senza usare un for per passare tra i vari campi?
-- Certamente sì, la libreria ADO ha istruzioni estremamente potenti per la 
manipolazione dei recordset ed è la norma che si lavori con interi record, 
ma comunque non mi sembra la soluzione più agevole
2) se creo una tabella collegata a tb1 e creo una query di accodamento
da tb1 a tb1_copy, avviando tale query da codice tramite :
DoCmd.Openquery("accoda_tb1") ottengo tempi decisamente migliori.
Qualcuno può spiegarmi il motivo, suggerendomi quindi il modo migliore
di lavorare per eseguire operazioni di "copia e incolla" da un db
remoto (non access) ad un db in locale (access) ?
-- Ecco la soluzione giusta.
--è ovvio che tu ottenga tempi migliori, non penserai di potere scrivere un 
codice VBA più performante del motore JET/ODBC ??
D'altro canto ricorda che non sta scritto da nessuna parte che il link alla 
tabella abbia lo stesso nome della tabella remota.
Davide
-- 
www.gestionedati.com
 

ciao davide e sergio,
grazie per le risposte!!!
Effettivamente bastava la seconda soluzione...più semplice e più
efficace!!! :-)
grazie
mdm