Newsgroup: it.comp.appl.access
Titolo: un'altra query super lentissima ...

Buon giorno e tantissimi auguri a tutto il NG.
... vi sembra possibile che una query di accodamento possa impiegare
molto di più di due ore per caricare circa 20000 record?
lavoro con A00/Nt4, PentiumIII, 384 MbRam, in rete.
La tabella di source è una tab DB2-IBM collegata via ODBC e va a
popolare una tab identica, sempre vuota (non posso lavorare sulla
tabella DB2 per vari motivi, per cui me la vorrei ricreare così) ...
però è uno strazio ... non riesco neanche a sapere se è impallato il
pc o che altro ...
Ancora tanti auguri e grazie.

 pc o che altro ...
la query fa insert e temo che db2 faccia commit ad ogni insert
Invece di fare la query perche' non provi ad usare un recordset e fare 
addnew?
Cosi' puoi mettere anche una progress bar se vuoi
--
a.cara

Grazie.
Ci provo l'anno prossimo ...
Augurissimi

"chippo" <

Certo che è possibile, anzi normale con tutti i Server collegati ODBC.
Due soluzioni:
1) Come suggerisce Alessandro Cara, utilizzare un recordset (e una
transazione)
2) Far eseguire la query d'accodamento al Server con una Query Pass-Trought
La seconda soluzione è senz'altro quella più rapida ma non puoi gestire una
barra di progressione.
Ciao, Oscar

 2) Far eseguire la query d'accodamento al Server con una Query Pass-Trought
? E' possibile fare una passthru con i dati provenienti dalla tabella 
locale (cosi' mi sembra di aver capito)? e se possibile come avviene? Ci 
sono sempre in gioco 20.000 recs ed immagino non siano ognuno di 2 bytes
--
a.cara

 Oscar Manfredini wrote:

Verissimo: infatti io ho inteso una query d'accodamento tra tabelle sul
Server.
Però rileggendolo non ne sono più così sicuro...  se vorrà chippo chiarirà
(pure la rima!)
Ciao, Oscar

 Server.
rileggendo e' proprio quello che fa db2 su db2 (server).
Con la passthru dovrebbe essre piuttosto veloce.
--
a.cara

E' bello tornare dalle ferie e trovare che il 3d è ricco di
suggerimenti e consigli.
Grazie davvero per l'attenzione.
...
Ho provato ad usare la query pt (per la transazione proposta ho
"qualche" problema a generare il codice), ma il risultato è questo
errore:
[Microsoft][ODBC Driver Manager] Funzione SQLSetConnectAttr del driver
non riuscita.(#0).
Mi sapreste dire qualcosa, almeno dove andare a spulciare?
Grazie.
PS: per chiarezza.
La tab source DB2 è su un server W2000, la tab da popolare in output
è in un mdb A00 su un server W2003, la rete è in fibra ottica.

"chippo" <
suggerimenti e consigli.
Grazie davvero per l'attenzione.
...
Ho provato ad usare la query pt (per la transazione proposta ho
"qualche" problema a generare il codice), ma il risultato è questo
errore:
[Microsoft][ODBC Driver Manager] Funzione SQLSetConnectAttr del driver
non riuscita.(#0).
Mi sapreste dire qualcosa, almeno dove andare a spulciare?
Non scrivi come l'hai invocata la query pt...
Ciao, Oscar


Oscar bada che forse e' come pensavo all'inizio.
Non sono due tabelle sulla stessa istanza DB2 (UDB?)
Target--> DB2
Source--> mdb
credo che la passthru non possa farla.
Si ritorna, credo, a  tentare la via della insert tramite recordset
--
a.cara

 Source--> mdb
errata corrige
Target-->mdb
Source-->db2
--
a.cara

 Si ritorna, credo, a  tentare la via della insert tramite recordset
Nel post dell'altro giorno parevano entrambe sul Server: mah   :-)
Ciao, Oscar

Siete due angeli.
E' come dice Alessandro:
source --> DB2
target --> mdb.
A questo punto, visto quanto dice Alessandro, provo con la transazione.
Ho trovato qualcosa di Alessandro Baraldi, in risposta ad un altro post
simile, ma se riusciste a mettermi giù due piccole righe di codice, vi
terrei presenti nelle mie preghiere ...
Grazie tante


Lascia perdere la transazione.
Se non fai "restarting" e commit parziali serve solo a perdere tempo
Il codice non dovrebbe essere particolarmente complicato.
Ti scrivo il codice in "codifica"  approssimativa
set rsDB2 = "select * from tabella db2"
set rsMDB = "opentable su MDB" o "select * from mdbtable where 1=2"
do until rsDB2.eof
	with rsmdb
		.addnew
		!campomdb = rsDB2!Campo
		......tutti i campi che interessano
		.update
	end with
	rsdb2.movenext
loop
(ADO o DAO va bene lo stesso, anzi sarebbe interessante che li provassi 
tutti e due per vedere se per caso uno e' piu' veloce dell'altro)
......ce fini'
A proposito di preghiere.
Non essendo un angelo ed anche abbastanza agnostico se proprio
vuoi fare una preghiera l'oggetto che potrebbe interessarmi dovrebbe essere
"...che al piu' presto ci tolga dalle scatole il presidente del 
consiglio e tutti i suoi epigoni. Amen"
--
a.cara
--
a.cara
 

... pur essendo io un diavolo e anche abbastanza ateo, devo confessarti
che l'oggetto richiesto per la preghiera è tale già dal 1994 ... se
almeno le preghiere servissero a qualcosa ...
Grazie per il codice.
Alla prossima