Newsgroup: it.comp.lang.visual-basic
Titolo: Ricerca di uno o più record in un database

Salve a tutti...
Avrei bisogno del vostro utilissimo e competente aiuto: devo realizzare la
ricerca di uno o più record in un database aperto con DAO, però
"aprossimata", cioè se cerco un indirizzo, via armando diaz, devo trovarlo
anche solo con diaz.
Spero di essermi spiegato bene e, soprattuto, che qualcuno di voi possa
aiutarmi.
buon lavoro a tutti e soprattutto buonanotte!:-)


ha scritto:

io penso che tu debba usare l'SQL
1-keyword SELECT
2-keyword from
3-keyword where
4keyword LIKE
es.:
SELECT Nomevia FROM Vie WHERE via LIKE Diaz

ok, quindi se scrivo LIKE diaz mi trova tutte le seguenti?
Armando diaz
Armando Diaz
ARMANDO DIAZ
Francesco diaz (il fratello :-) )
ecc?
se č cosě grazie mille!

 ha scritto

se poi tu scrivessi "like '*diaz'" o "like '%diaz'" potrebbe trovarti anche
quello dell'inter :)

perchè mi da errore con questo codice?! mi sto scervellando da un'ora! :-(
Private Sub Command1_Click()
 If txtDaCercare = "" Then
    i = MsgBox("Devi inserire il testo da cercare!", , "Errore")
 ElseIf (Option1.Value And Option2.Value And Option3.Value = False) Then
(non fate caso a questa condizione, è sbagliata)
    i = MsgBox("Devi selezionare uno dei campi di ricerca!", , "Errore")
 ElseIf Option1.Value = True Then
    Set rs = db.OpenRecordset("SELECT * FROM Clienti WHERE codice LIKE " +
txtDaCercare.Text)
    caricaTextBoxCliente
 ElseIf Option2.Value = True Then
    Set rs = db.OpenRecordset("SELECT * FROM Clienti WHERE indirizzo LIKE "
+ txtDaCercare.Text)  *****
    caricaTextBoxCliente
 ElseIf Option3.Value = True Then
    Set rs = db.OpenRecordset("SELECT * FROM Clienti WHERE comune LIKE " +
txtDaCercare.Text) *****
    caricaTextBoxCliente
 End If
End Sub
Le rige con gli asterischi mi generano l'errore di runtime 3061: "Parametri
insufficienti. Previsto 1"
Che diavolo vuol dire? sulla guida non ho trovato documentazione su questo
tipo di errore :-(

[*javalab*=
jav...@labrador.ca
] ha scritto:

Come si nota la nostra etŕ! Fondiamo il "masochistclub"? ;-)
Comunque, in ere geologiche "moderne", meglio Like '*diaz*' per DAO e Like
'%diaz%' per ADO (ho aggiunto un jolly anche dopo diaz)

 "Parametri insufficienti. Previsto 1"
Questo normalmente indica il nome di un campo non trovato... o, ovviamente,
con nome scritto in modo errato.
Poi, anche per il futuro, rammenta che la concatenazione di stringhe (nota
che per stringhe generiche si intende anche una serie di caratteri
rappresentanti un numero) si fa con & e non con +.
Quest'ultimo esegue, ove possibile, una somma...
Inoltre, ma qui verrebbe voglia di consigliarti la lettura di un buon libro,
se non della normale guida..., il LIKE presume un confronto fra stringhe e
le stesse devono essere fra apici, che tu non hai messo...

ho controllato e i nomi dei campi sono scritti in modo corretto.
La cosa strana č che ciň accade solo per i campi indirizzo e comune, il
campo codice invece funziona bene, xkč?
Poi non ho ben capito il fatto degli apici (gli apostrofi intendi vero?):
dove dovrei piazzarli? il confronto č tra il contenuto di una textbox e il
contenuto di un campo del database.. non sono tutte delle stringhe?
cmq grazie per l'aiuto a ttti

 delle stringhe?
Sì e, appunto, vanno fra apicini. Per esempio:
   Set rs = db.OpenRecordset("SELECT * FROM Clienti WHERE codice LIKE '" &
txtDaCercare.Text & "'")
In più, se la stringa da cercare (i parametri/variabili) contiene apicini li
devi raddoppiare:
   Set rs = db.OpenRecordset("SELECT * FROM Clienti WHERE codice LIKE '" &
Replace(txtDaCercare.Text,"'","''") & "'")

ecco cosa mancava!!! l'apicino finale del like! porcaccia... :-) grazie
mille...
PS: ma siamo sicuri che mi trova
armando diaz
francesco diaz
cameron diaz
ecc?
io cerco ma non mi trova nulla... :-) ora controllo meglio, grazie mille!

 mille!

un'ultima cosa e poi mi levo dalle scatole :-)
perche con questo metodo se ci sono + record che corrispondono al criterio
impostato il recordset rs ne contiene sempre solo 1 (quello con absolute
position=0)?

ho inserito lo stesso codice SQL in access e mi trova tutte le occorrenze
:-((

[*Paolo C.*=
paolo...@libero.it
] ha scritto:

Paolo, ora lo ri-dico: Leggiti qualche buon libro.
In un recordset puoi vedere un record alla volta, quello corrente...
Guarda (almeno) le proprietą del recordset EOF e i metodi MoveFirst,
MoveNext
E lascia perdere l'AbsolutePosition e pure il RecordCount (ma leggine le
caratteristiche e ... le limitazioni)

 occorrenze :-((
Vuoi dire che te le mostra tutte in una griglia. E' diverso.
Hai il tuo recordset, scorrilo e vedrai che trovi tutto quel che t'aspetti.

grazie della tua pazienza lupo, sono rare le perone come te :-)
cmq lo so che nel recordset posso vedere un solo record alla volta, il
problema è che esso contiene realmente un solo record dopo che ho applicato
il SELECT.
Lo scorro con i comandi movenext e moveprevious, ma non ci sono altri record
da scorrere :-(

ok! ok! trovato l'errore
siccome la proprietą recordcount in un recordset come il mio non restituisce
il totale dei record se non si č arrivati prima all'ultimo record, mi diceva
che c'era un solo record, e siccome io i pulsanti di avanzamento li avevo
creati basandomi su tale proprietą io CREDEVO di avanzare, ma gli if di
controllo nella routine del pulsante avanti non mi facevano fare nulla!
grazie mille!
PS: hai ragione meglio abbandonarle, e allora cosa mi consigli di usare al
posto di recordcount e absoluteposition?
buon lavoro

 usare al posto di recordcount e absoluteposition?
Il RecordCount (in DAO significativo e corretto solo dopo posizionamento in
coda al recordset con MoveLast) solo se devi sapere quanti sono i records,
ad esempio per esporre una barra di completamento.
Lo scorrimento andrebbe sempre fatto così (o similare):
If rs.BOF<>0 And rs.EOF<>0 Then
    MesgBox "Nessun record"
Else
    rs.MoveFirst
    Do
        If rs.Eof Then Exit Do
        'Fai quel che vuoi del record corrente
        rs.MoveNext
    Loop
End If

 ...sono rare le perone come te :-)
Vabbè, se l'endovena sta già segnando, hai provato per via rettale? ;-)

Grande l'idea del cateterino!
SK

 Grande l'idea del cateterino!
Veramente (e scherzosamente) volevo alludere al clisterino...
Ho sbagliato termine?


Adesso che mi ci fai pensare forse ho sbagliato io, comunque il concetto è
quello.
SK

Adesso ho un altro problema :-(
xkè quando carico il recordset e un campo risulta vuoto il programma mi da'
errore?
Non dovrebbe caricarmi il campo vuoto e star zitto? :-)

[*Paolo C.*=
paolo...@libero.it
] ha scritto:

No, purtroppo. Se per vuoto intendi Null, lo devi testare adeguatamente.
Questo è uno dei motivi (vecchia storia) per i quali io impedisco la
presenza dei Null nei miei database.