Newsgroup: it.comp.lang.visual-basic
Titolo: Seek in ADO

Sto provando a convertire un pgm scritto con DAO in ADO e mi sono bloccato
sul metodo SEEK (ricerca di un record tramite chiave). Mi pare di capire
che utilizzando i database Access 97 l'OLEDB non lo permette, ed in
generale il SEEK è poco supportato dai provider. Ma allora cosa devo fare?
Ho provato con il metodo FINDFIRST ma con una tabella di centinaia di
migliaia di record è ingestibile .....
Suggerimenti ?
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Suggerimenti ?
Non conosco Seek, per cui potrei dire delle cavolate.
Credo però che ci siano diverse possibilità:
1) FIND: funziona bene, e ti permette di trovare un record con un indizio
2) FILTER: Sintatticamente un po' limitato, ma abbastanza veloce. Puoi
filtrare il recordset e estrarre il record che ti serve
3) MOVE: Se già conosci la posizione del Record, ti ci sposti sopra con una
sola operazione
4) Nuovo Recordset: Apri un nuovo recordset, sfruttando la stessa
connessione già aperta, e riesegui la query.
A seconda dei casi e delle dimensioni del recordset, le varie opzioni hanno
performance e applicabilità diverse. Devi fare alcune prove.
Ciao
Alberto

Tanti esperti che ti sapranno spiegare benissimo come funziona
l'istruzione left$, ma che poi svaniscono quando ci sono quesiti un pò più
seri ......


 seri ......
Non che mi senta chiamato in causa dal termine "Esperto", ma forse hanno
pensato che il mio post fosse sufficiente....
Ciao
Alberto

 seri ......
Heilà, misterioso Colui, che ne dici di tornare da dove sei venuto?

 ha scritto

basterebbe rispondesse, colui.
j.

 j.
E tu, jj, ma quante ferie fai conto di fare?

"javalab" ha scritto
:-)
Bye, G.

 ha scritto

e' li' il casino. ne sto facendo pochissime.
qui leggo. sulle cose interessanti ho solo da imparare...
ciao, a.

 Non conosco Seek, per cui potrei dire delle cavolate.
Faccio paro-paro copy and paste da un mio vecchio su google
(tanto per rammentare che spesso basta cercare sui vecci post...):
[begin copy-paste]
In Ado esiste il metodo seek, semplicemente ha un tot di presupposti:
- che sul recordset sia impostato un indice
- che l'indice esista
- che tu apra un recordset -direttamente- sulla table
- che il cursore sia lato server
- che il recordset non sia creato con clausola "withevents" (non c'è scritto
da nessuna parte ma è così)
- che il provider supporti l'index e il seek
fatti salvi questi presupposti, ti faccio un esempio __tratto direttamente__
da
un'altra risposta mia sull'argomento (leggasi cerca su google
http://groups.google.com/groups?q=ado+seek&btnG=Google+Search&meta=group%3Di
t.comp.lang.visual-basic)
Dim cnnTempor As New ADODB.Connection
Dim rsTempor As New ADODB.Recordset
ValoreRicercare = 1
 With cnnTempor
      .CursorLocation = adUseServer
      .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
source=c:\DB1.mdb"
 End With
  With rsTempor
        .Index = "Codcli"
        .CursorLocation = adUseServer
        .Open "offerte", conTempor, adOpenKeyset, adLockOptimistic,
adCmdTableDirect
        .MoveFirst
        .Seek ValoreRicercare, adSeekAfter
        If Not rs.EOF Then
            ' codice tuo
        End If
    End With
Per quanto riguarda la creazione dell'indice, dipende essenzialmente dal
tuo motore database, ma generalmente sono valide sia la soluzione SQL
"CREATE INDEX" sia lavorare sugli oggetti Adox, anche se, personalmente,
trovo più comodo e performante una buona connection.execute "create
index"...
Naturalmente, l'uso di un indice è sicuramente consigliato per tutti quei
campi
(oltre ai campi chiave) su cui vengono eseguite ricerche frequenti, ma non
deve
essere sposata come soluzione di utilizzo generale.
Indicizzare e manutenere un indice sono comunque operazioni onerose in
termini
di cicli di elaborazione da parte di un motore database e quindi devono
essere
limitate ai casi in cui l'utilità dell'indice è superiore al suo costo di
manutenzione.
I campi significativi in questo senso vengono generalmente già indicizzati
in
fase di disegno del database e non certo a runtime.
Meno che meno è sensato indicizzare "al volo" solo allo scopo di eseguire
una .seek:
meglio, in caso di uso sporadico di una certa ricerca una .filter sul
recordset.
[end copy-paste]
ciao
ugo
p.s.
ciao a tutti   :-)   :
fra ferie e pre-ferie da stress sovrumano è una buona mesata che sono
sparito:
che è successo da queste parti?

 che č successo da queste parti?
E' successo che ci chiedevamo come potessero stare quelli che si facevano
una mesata in ferie.
Pre-ferie da stress? "Senta, Lei, ma mi facci il piacere..." ;-)
Bentornato.

 Bentornato.
Thanks
ciao
ugo

 e tutto il resto dell'assenza è stato "pre-ferie da stress"...   ;-(((
Consolati. Un mio amico è appena tornato da un viaggio a Praga...
Bye, G.

 e tutto il resto dell'assenza è stato "pre-ferie da stress"...   ;-(((
Ugo, scherzavo, ma temo di aver fatto una gaffe.
Scusami. :-((

 Scusami. :-((
de che?    :-)
era ovvio lo scherzo.   :)
ciao
ugo

 Consolati. Un mio amico è appena tornato da un viaggio a Praga...
:((
che sofferenza vedere Mala Strana così...   :(
ciao
ugo