Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Ricerche continue su un recordset , causano rallentamento

Ciao a tutti !
Il mio problema é questo :
Apro un recordset con circa 300 record al suo interno.
Poi , dentro questo recordset devo cercare un dato che prendo da un altra
lista di circa 50 elementi.
Quindi per ogni elemento devo far scorrere tutto il recordset per verificare
se c'e' quel dato,e se c'e' metto una certa variabile a "True".
Pensavo che tutto si svolgesse rapidamente, visto che devo far passare solo
300 dati per 50 volte, invece tutta la procedura impiega circa 5 minuti...
argh.... troppo :-)
Per eseguire le ricerche uso una stringa SQL con un filtro "Where..."
Ora... é giusto che ci impieghi cosi' tanto oppure ho sbagliato qualcosa io
??
Ciao e grazie mille per aver letto il mio mex.
DaVe

 DaVe
TabA ---> prima tabella da cui si estrapolano i 300 records
TabB ---> seconda tabella da cui si estrapolano gli altri 50 records
variabile ---> variabile che si mette a TRUE nel caso che venga soddisfatta la
condizione
altrodato ---> dato della TabA che viene verificato che esista nei 50 records
della TabB
datocorrispondenteTabB ---> dato della TabB che viene confrontato con altrodato
della TabA
stringaSQL di UPDATE :
    "UPDATE TabA SET variabile = TRUE WHERE [condizione di selezione dati dalla
TabA] AND  altrodato IN (SELECT datocorrispondenteTabB FROM TabB WHERE
[condizione di selezione della TabB] )"
sostituisci i vari dati la metti sotto esecuzione , per me se ci mette qualche
secondo è troppo !!!
ciao

 --
Ciao Roal, grazie per la risposta.
DaVe
P.S: Pensavo di caricare tutti i dati in un array, e poi fare le ricerche li
dentro (ci guadagno che non devo continuamente leggere dal disco giusto? )
ma siccome non saranno sempre 300 dati non posso usare questo sistema. In
teoria potrebbero arrivare ad un valore vicino all'infinito (potrebbero).

se c'e' quel dato,e se c'e' metto una certa variabile a "True".
la condizione di confronto dove sta ?
se e' all'interno dello stesso DB puoi fare un'unica Select
Select * from Tabella1 in (Select .... where Condizione = ecc ecc)
ciao
DG_Solution


Dunque... più specificatamente...
Per ora lavoro in questo modo :
-Apro il primo recordset di 300 dati.
-Prendo il PRIMO di 50 dati da un altra tabella o lista.
-Eseguo un ciclo tipo
Do while....
    confronta dato
    incrementa indice
    movenext
Loop
Se lo trova, inserisce un "1" in un array, alla posizione corrispondente
all'indice (che viene incrementato ogni volta che si passa al record
successivo)
Ecco, tutta sta roba per 50 volte... mi causa un rallentamento di 5 minuti
per eseguire tutta l'operazione... ma io speravo di impiegare al massimo
qualche secondo.
Stasera provo con il sistema suggeritomi da te e da Roal, magari migliora
:-)
Ah... per cercare se il dato c'e' o no nel recordset di 300 dati,uso un
comando SQL tipo   "Select ... Where [Dato] = " & nomevariabile & ".....
e poi controllo con If nomerecordset.eof = true then...
Mi sa che un bel libro sulla creazione di databases mi farebbe bene eh ??
Ciao e grazie mille per le risposte !!
DaVe

successivo)
se si tratta di lavorare su un array il "do while" è la scelta che avrei
fatto anch'io (probabilmente non ci sono alternative ;-)) ... pero' i 5
minuti sono tanti... e poi non ho capito bene perche' devi ripetere 50 volte
il ciclo. Fai l'esempio reale che forse e' meglio
ciao
Davide

sapere quale parte estrarre per eseguire la ricerca ???
ecco proprio qui sta il trucco (se cosi si puo' dire.... ci metti una
clausola Where nella Select)
Ciao
Davide


Ok.. grazie ancora per la nuova risposta... cmq... non devo sapere QUANTE
volte il "12A" c'e' nei 300 dati della seconda tabella, ma solo SE C'E' o NO
quel "12A" in mezzo agli altri 300 :-))
Cmq la parte del  "hCursor = obj.opencursor" ecc..ecc.. non la conoscevo,
devo provare anche quella
Ciao Davide ! alla prossima !!
DaVe