Newsgroup: it.comp.lang.visual-basic
Titolo: Operatore SQL LIKE

Dovrei effettuare una ricerca in fase di salvataggio di una scheda per
eventuali doppioni.
Tale controllo deve essere effettuato solo sul campo 'ragione_sociale'-
Dato un record già esistente contenente il campo ragione_sociale con il
valore Dott. Paolo Rossi,
Se la nuova scheda contiene il valore
Dtt. Paolo Rossi
oppure
Dott. P. Rossi
o ancora
Dott. Paola Rossi      (notare errore sul nome)
il programma deve avvisare di un possibile doppione.
Per comodità ho creato una sub che mi dividesse i nomi in un array per poi
creare una istruzione SQL del tipo
set tbl = db.openrecordset("select * from uteni where ragione_sociale " &
stringa)
   stringa conterrà l'array di ricerca delle parole
esempio :
Io digito  solamente Rossi Paolo (2 parole)
stringa = "
set tbl = db.openrecordset("select * from utenti where ragione_sociale like
'Rossi' and like 'Paolo'")
Il tutto però si risolve con un errore nella stringa SQL.
Dove sbaglio?
Saluti
 Mauro


la query corretta e' questa:
 set tbl = db.openrecordset("select * from utenti where ragione_sociale like
 '%Rossi%' and ragione_sociale like '%Paolo%'")
comunque non risolve assolutamente il tuo problema!
l'operatore like restituira' solo i record che contengono
sia entrambe le parole 'paolo' e 'rossi' ma non 'paola' o le altre
che hai indicato.
HTH
bye
R

 '*Rossi*' or ragione_sociale like '*Paolo*'")
Sostituisci * con % se usi ADO (invece di DAO)

A parte l'errore logico della mancanza dell'operatore %
la soluzione like non è quella che ti occorre, perchè tu
hai diverse combimazioni del tuo nome che non potranno
mai entrare tutte assieme in una like.
Quello che ti occore è l'uso della clausula In, che ti aiuta
scremando tutti quei record la cui occorrenza è certamente
tra quelle che tu specifichi lasciando adito ad ogni dubbio.
Così facendo, premesso che la tua sub, cacci fuori tutti
le possibili combinazione che secondo te potrebbero
essere state adottate, facendo una query
select count(*) from t1 where rag_soc in (array(1), array(2), array(n))
dove array sarà il nome del tuo array e il numero, l'elemento
del vettore, ma il tutto espresso sotto forma di stringa, perchè quella
dovrà comunque essere una instrizione sql valida
otterrai con certezza un recordset monoriga dove ti dice il numero
di occorrenze trovate.
Ciao
Andrea

 ha scritto nel messaggio
news:b2rh6m$1f1cpq$1...@ID-174464.news.dfncis.de...


 Attualmente sto usando DAO... porta differenza l'operatore?
Sě, devi usare * (% solo se ADO)

 eventuali doppioni.
A parte gli ottimi consigli che ti hanno già dato, a seconda del db che usi
potresti anche fare una ricerca usando l'operatore Sounds (o analogo a
seconda del DB che hai).
Sostanzialmente, quello che ti consiglio è di scandire il testo digitato,
prendere qualunque parola di almeno tre lettere, e metterla in una
condizione where della select comparandola col campo attraverso il sounds.
Se il tuo dbms ti fornisce un operatore sounds che restituisce un indice di
somiglianza, puoi ad esempio fare la media di tutti gli indici restituiti
dalla comparazione di ciascuna parola, oppure il totale degli indici, e con
un po' di esperienza troverai un valore soglia al di sopra o sotto del quale
segnalerai all'utente un potenziale duplicato.
Ad esempio, con sounds, Paolo e Paola vengono riconosciuti come identici
(con alcuni dbms Sounds è tarabile, vedi l'help).
Ciao
Alberto

 ha scritto nel messaggio
news:cPl4a.129610$YG2.3...@twister1.libero.it...


 Io uso Access come database ma non ho trovato nulla al rigurado...
Non conosco nei dettagli Access.
In Sql-Server/MSDE esiste Soundex e Difference, che per queste cose sono
geniali.
In Fox-Pro dovrebbe essere Sounds.
In Access non so se esiste una function per una comparazione di
'somiglianza' fra due stringhe. Cerca nell'help di Access, ma non nutro
troppa fiducia...
Ciao
Alberto