Newsgroup: it.comp.lang.visual-basic
Titolo: metodo ado.find

ciao a tutti, e' un po' che manco ,ho una datagrid
tramite il metodo ado.find ( ado = adodb.recordset) cerco  il primo record
che inizia per il valore immesso in una textbox
ado.find nomedelcampo & " like ' " & testo & "*' "
mi funziona alla perfezione se il campo e' stringa,
ma devo cercare anche in campi numerici e date
ho provato ha convetire il testo in numeroo in data  , sostituire ' con #
per le date, ma niente mi da' errore sconoscitu -
2147735271
(80020005)
sicuramente sara' una cavolata,
ho gia' cercato su google, ma tutti gli esempi che ho trovato sono su
stringhe, ho anche letto che non e' il metodo migliore , ma devo solo farlo
su un campo(colonna ) alla volta , quindi mi va piu' che bene almeno penso
grazie Ilario

 per le date, ma niente mi da' errore sconoscitu -
2147735271
(80020005)
Ciao Ilario,
per i numeri e le date la Like non va bene, vale la sintassi per comandi
SQL, quindi
ado.find nomedelcampo_numerico & ">123.45"
Usa sempre il punto per il separatore interi/decimali, indipendentemente dai
settaggi del pannello di controllo
ado.find nomedelcampo_data & ">=#MM/GG/AAAA#"
esprimi la data in quel modo, indipendentemente dai settaggi del pannello di
controllo
Valgono, sia per numeri che date, tutti i confronti per =, >=, <=, <>

 ha scritto

fermo restando quello che dici, ero convinto che anche il like per le
stringhe fosse un operatore sql:
http://www.shocknet.org.uk/defpage.asp?pageID=38
ciao

 stringhe fosse un operatore sql:
...
Non credo di aver mai detto il contrario. Ho solo detto che non va bene per
campi numerici e data, tant'è che nelle prime battute del link che hai
riportato, si vede un esempio dove il campo di confronto/Like è fra
apicini...
Non comprendo, puoi spiegarti, per favore? :-((

 Non comprendo, puoi spiegarti, per favore? :-((
no prob, da come la spiegavi sembrava che like non fosse di sql. in
genere, ho sempre avuto l'impressione che i vari metodi del controllo
data siano rivestimenti di comandi sql. ripeto, no prob.
piuttosto: come si fa a fare un findnext ? e' un po' che ci smacchino,
in ado, per emulare il seek senza indici, ma trovo sempre e solo la
prima occorrenza. non vorrei un select dei soli _record_ che
rispondono ai criteri, ma in un rs trovare man mano quelli presenti,
come shift-f4 in word. si puo' ? mi sembrava di aver capito di si', ma
non ci salto fuori.
grazie

 
Uno dei parametri di .Find e' la posizione da cui partire. Se metti la 
posizione la ricerca parte da li', altrimenti parte dal recordset 
successivo a quello in cui si trova.
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 non ci salto fuori.
Ho guardato le note della Find (in ADO260.Chm), perchè non la uso nel modo
più assoluto (non potendomi accontentare di quella scandalosa unica colonna
possibile), ma sembrerebbe (lo si vede abbastanza chiaramente nell'esempio
accessibile dal link in coda alla pagina, ma non è esplicitamente scritto
chiaro dalle note) che, come ha già scritto emmex, la successiva Find parta
dalla posizione (record) corrente _esclusa_, quindi trova il seguente che
soddisfa il criterio. EOF se non lo trova (o BOF se la SearchDirection=-1
indicando una ricerca a ritroso)

 successivo a quello in cui si trova.
.Find s, , adSearchForward, .Bookmark + 1
mi mancava il bookmark...
se ho capito, senza l'ultimo parametro parte sempre dall'inizio,
mentre avrei pensato che il default fosse il corrente.
grazie

a.p ha scritto:

Vero, mi era sfuggito. Dall'esempio che citavo si vede bene:
    Set rstTitles = New ADODB.Recordset
    strSQLTitles = "SELECT title_id FROM titles"
    rstTitles.Open strSQLTitles, Cnxn, adOpenStatic, adLockReadOnly,
adCmdText
    count = 0
    rstTitles.Find "title_id LIKE 'BU%'"
    Do While Not rstTitles.EOF
        'continue if last find succeeded
       Debug.Print "Title ID: "; rstTitles!title_id
        'count the last title found
       count = count + 1
        ' note current position
       mark = rstTitles.Bookmark
       rstTitles.Find "title_id LIKE 'BU%'", 1, adSearchForward, mark
        ' above code skips current record to avoid finding the same row
repeatedly;
        ' last arg (bookmark) is redundant because Find searches from
current position
    Loop
Ehhhhmmmmm, mi sfugge o non mi sfugge quel % nell'esempio e quel *
(corretto) nella pagina di guida???
mammamiainchemanisiamo...

     Loop...

Ok, per quanto riguarda il primo commento, ho bevuto io:
Il secondo argomento della Find (skiprows=1) è coerente

 mammamiainchemanisiamo...
alt alt alt. nella guida anche da me dice
"state like M_*" matches Maine and Massachusetts
pero' da me funziona bene il %.
aspetta...
Debug.Print s & " -> " & .Bookmark & " -> " & !url
url like '%microsoft%' -> 1 -> 
www.repubblica.it
'parte da qui , non vale :)
url like '%microsoft%' -> 329 -> 
ftp.microsoft.com
url like '%microsoft%' -> 430 -> 
www.microsoft.com/technet
url like '*microsoft*' -> 1 -> 
www.repubblica.it
url like '*microsoft*' -> 329 -> 
ftp.microsoft.com
url like '*microsoft*' -> 430 -> 
www.microsoft.com/technet
gli piacciono tutti e due...
lo sapevo che con ado mi aumentava il mal di testa... :)

 Si saranno messi d'accordo o no???
con la johnny walker, sconto comitive ?

 lo sapevo che con ado mi aumentava il mal di testa... :)
Da quel che avevo capito con ADO+Find la Like, segue la sintassi della Like
per le stringhe di VB, quindi * in ogni caso, mentre con la Like nei comandi
SQL (escluso quindi Find) vuole %
Non ci capisco piů nulla, anche se sono sufficientemente sobrio.

a.p (per esteso), chettivengaunbene, hai la box piena...
dammi un altro indirizzo, grrrrr.

Riprovo a quelli che "programmano di domenica".

 Non ci capisco piů nulla, anche se sono sufficientemente sobrio.
orpo ! e quando sei ciocco cosa hai mandato giu' ?
nel caso, dimmelo in mail :)
cmq, visto che vanno tutti e due, sarei per il percento, almeno non ci
si sbaglia...
ciao e grazie mille

 nel caso, dimmelo in mail :)
Quando sono ciocco rendo meglio.
Ohhhhh, per tutti, si fa per dire, neh?! La mia ultima sbornia risale ad
almeno 20 anni fa.


E' cosi', anche se io come te, andando a memoria e a logica, ho scritto 
il contrario.
Find parte sempre dal primo record, a meno che non si specifichi un
record di partenza.
Ogni volta lo dimentico e faccio dei gran pasticci ... :-(


 
Vedi la mia seconda risposta all'ex canide.


 E' ben quello che mi dice ciccia (quello con a.p.(per
esteso)@
tin.it
)
mi dispiace. piena non e' senz'altro, per tenere la linea viva oe
sincronizza ogni 5 minuti, per cui fra tutti gli account e i ng,
quando ha finito deve ricominciare. avra' un limite sul mail singolo.
cmq e' arrivato su sundaysw. rigrazie mille.
alla voce find c'e' molta piu' roba, a partire da
find and seek records.
strano che abbiano reintrodotto il seek... <g>
ciao