Newsgroup: it.comp.lang.visual-basic
Titolo: Velocizzare SELECT usando rs.CLONE

Ciao a tutti,
ho una tabella del tipo:
ID     NOME     COD     COD2
1      Pippo      C1        F1
2      Pluto       F1        null
ecc.
In pratica devo scorrere tutti quelli con COD2 NOT null.
Di questi poi devo fare una nuova select Where COD=COD2 ('F1')
Volevo sapere se posso usare una cosa del genere.
ADORS.source = "SELECT * FROM TAB WHERE NOT COD2 IS NULL"
ADORS.open
SET ADORS2= ADORS.Clone
e poi fare una cosa del genere
if adors2.filter "COD = " & adors("COD2") non è vuoto then
....
endif
Adesso faccio tutte le volte
adors2.source = "SELECT * FROM TAB WHERE COD=<cod2>"
Ma credo si possa migliorare.
Grazie :D

 Ma credo si possa migliorare.
Nel subject chiedi come 'velocizzare' una select, ma a me sembra che tu 
voglia in qualche modo cercare di eseguirne meno.
Forse ti converrebbe ottenere i dati in un colpo solo e poi filtrarli 
(compatibilmente con la logica del tuo applicativo...).
Ciao
Alberto
-- 
"Se viriamo, viriamo viriamo viriamo;
Se andiamo dritti, viriamo"
(Cit. "il tattico")

 (compatibilmente con la logica del tuo applicativo...).
Si, dato che sono tutti i daiti su un'unica tabella dove le 2 select
lavorano, volevo sapere come usare clone, .filter, .find.
Ho provato ma mi hanno dato errori.
Domani posto il codice che mi da problemi :)
Tnx :D
(PS: sul .clone mi da bookmark non supportato, il rs lo apro senza definire
proprietà (lock, cursor ecc))

 lavorano, volevo sapere come usare clone, .filter, .find.
Il primo passo è quello di ottenere i dati in un colpo solo.
Poi il filter diventa una cavolata.
Ad esempio:
SELECT 
A.ID
, A.NOME, A.COD, A.COD2,
ID_B=
B.ID
, NOME_B=B.NOME, COD_B=B.COD, COD2_B=B.COD2
FROM TABELLA AS A
LEFT OUTER JOIN
TABELLA AS B
ON A.COD2=B.COD
ORDER BY A.COD2,
A.ID
Ottieni un rs con già estratti tutti i dati.
Poi te lo scorri e ci fai i giochini.


 Di questi poi devo fare una nuova select Where COD=COD2 ('F1')
ossia fammi capire....
non puoi spaccare tabella in 2?...non so cosa vuoi fare ma sembrerebbe più
logico no?
Tab 1
ID NOME COD
1    Pippo   A1
3    Pluto    A2
4    Pollo    A3
TAB2
LINK    DATI
    A2 dati che mi interessano
    A3 sati che mi interessano
Relazione uno a molti....
etc etc ...ma non si che vuoi fare!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
Aderisci al M.A.I.  
http://www.villaceleste.it/html/icadioti/

 Di questi poi devo fare una nuova select Where COD=COD2 ('F1')
Se sai già cosa cercare, io farei cosi:
"Select * from Tabella where Cod= QuellaCosa and Cod2=QuellaCosa"
Se invece non lo sai, penso che dovrebbe funzionare pure:
"Select * from Tabella where cod2 <> null and cod=cod2 "
--
Greg

 "Select * from Tabella where cod2 <> null and cod=cod2 "
Forte...


 Alberto
Ma la prima select era buona dai, veloce, concisa e chiara :)
--
Greg

 Alberto
L'ho detta grossa? :)
--
Greg

 Alberto
Bah, perň funziona!
Non capisco a cosa alludi, domani appena sveglio me lo dici, se perň ti
riferisci al null (ok che si scrive not isnull) ma fa il suo lavoro, infatti
se ambedue in campi fossero null  il record non sarebbe scartato.
'Notte
--
Greg

 Bah, però funziona!
Anche "Select 1" funziona.
Ma non fa ciò che l'OP chiedeva.
Ciao


 Di questi poi devo fare una nuova select Where COD=COD2 ('F1')
Premetto che non ho capito il significato di "COD2('F1')"
Con questa query "prendi" tutti i record con COD e COD2 uguali ma *non* 
entrambi nulli (se uno solo fosse null cmq verrebbe scartato da COD=COD2) :
SELECT * FROM TAB
WHERE COD=COD2 AND COD IS NOT NULL
IMHO e' sempre meglio ottenere il minimo numero di record necessari 
(rendendo le query un po' piu complesse) piuttosto che scartarli da codice 
durante lo scorrimento o peggio tramite .Filter visto che la sua sintassi e' 
piuttosto limitata.
-- 
.o0-- I.d.N. alias JYD --0o.
Please Cut "-some trees-" for reply 

 Alberto
Ah vabbeh, e io che pensando di aver scritto una cavolata, sono andato a
provare la query a mezzanotte :(
--
Greg

 sua sintassi e' piuttosto limitata.
Forse a questo punto è meglio che faccia ogni volta:
SELECT * FROM TAB
WHERE COD='F1'
oppure col codice che mi ritrovo.
La mia idea era quella di prendermi con una select tutti i fornitori e
filtrare senza fare ogni volta una select di 1 record.
Grazie :)

 filtrare senza fare ogni volta una select di 1 record.
Quesito: ma la query che ti ho postato due giorni fa l'hai provata?



Come ti aveva gia' scritto Albe V° dovresti fare il "self-join":
Una domanda che sta' a monte, invece di avere COD, COD2, ........CODn non 
sarebbe meglio avere un'altra tabella dove tieni gli "alias" dei codici?
(Che poi era il senso del post di Wodka40°)
Per esempio
TABELLA ALIAS
COD   CODalias
 F1         A1
 F1         A2
 F2         A3
 F2         A4
Nella tua tabella elimini tutti i COD2,COD3.... utilizzando solo COD, mentre 
quella nuova usarla per risalire al codice "padre"....


 Quesito: ma la query che ti ho postato due giorni fa l'hai provata?
Non l'ho provata, comunque il mio "problema" non sarebbe quello di ottenere
tuti i dati insiema, più che altro sarebbe da quella query che hai postato,
poi filtrarmi solo i codici che mi servono.
Cioè quella se l'ho letta bene mi tira fuori tutti i record (come volevo),
ma poi per cercare COD2="F1" devo scorrerlo o filtrarlo.
Ma la .filter non mi funziona :)


Perchè non le provi tutte quelle ti abbiamo passato, invece di leggerle
appena? Magari quel filtro che te dici che non ti funziona, l'ha già
fatto la query, ed hai già il risultato finale!
Provare,capire, eventualmente adattare :)
--
Greg
Si può mangiare un elefante usando solo un cucchiaino; è solo questione
di tempo!

Il 16/06/2005, Andrea ha detto :

Cioè:
debug.print rs.recordcount
RS.Filter = "COD2='F1'"
debug.print rs.recordcount
non funziona?
