Query di ricerca in piu'campi

giovedì 31 luglio 2008 - 10.48

jacopominelli Profilo | Newbie

Ho un nome a cui corrispondono piu lingue parlate. Ho creato un form di ricerca con una casella di testo per il nome e una combo box per la lingua. Partendo da questa unica combo,vorrei access cercasse in tutti i campi(lingua 1,lingua 2...) ma non riesco a costruire un filtro adeguato. Come fare?

Molte grazie.

alx_81 Profilo | Guru

>Ho un nome a cui corrispondono piu lingue parlate. Ho creato
>un form di ricerca con una casella di testo per il nome e una
>combo box per la lingua. Partendo da questa unica combo,vorrei
>access cercasse in tutti i campi(lingua 1,lingua 2...) ma non
>riesco a costruire un filtro adeguato. Come fare?
Non so se ho capito bene il problema.. Ma dovrebbe bastare una OR nella WHERE della query che vai a fare per ricercare i dati.
Ad esempio, se hai una tabella VALORI con due campi Lingua1 e Lingua2, potresti fare un filtro così:

SELECT campo1, campo2 FROM VALORI WHERE Lingua1 = tuovalore OR Lingua2 = tuovalore

Non è la gestione migliore delle lingue, anche perchè sarebbe meglio normalizzare, ma se devi lasciare la struttura così, puoi usare la OR.
>
>Molte grazie.
Di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jacopominelli Profilo | Newbie

Grazie innanzitutto per il tuo aiuto.
Ho piu campi di lingua, lingua 1, lingua 2 e lingua 3. Applico il filtro Like[Forms]![Search_frm].[lingua]&"*"
So come farlo funzionare con due campi, ma inserendone tre il tutto si complica. Potresti essere piu preciso? Scusami ma sono praticamente nuovo in access.

Grazie,

Jacopo

alx_81 Profilo | Guru

>Ho piu campi di lingua, lingua 1, lingua 2 e lingua 3. Applico
>il filtro Like[Forms]![Search_frm].[lingua]&"*"
>So come farlo funzionare con due campi, ma inserendone tre il
>tutto si complica. Potresti essere piu preciso? Scusami ma sono
>praticamente nuovo in access.
Come lo fai per due, lo fai per tre.. non cambia nulla..
Basta che usi l'oppure (OR)
>
>Grazie,
Di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jacopominelli Profilo | Newbie

E'proprio quello che sto con fatica cercando di fare ma che non riesco proprio a ottenere.Con 4 non mi funziona (in verita' funziona ma non con tutti i record). Se io ti inviassi il file,tu potresti dare un'occhiata rapida al filtro?Sono sicuro in pochi minuti capiresti dove sbaglio.
J.M.

alx_81 Profilo | Guru

>E'proprio quello che sto con fatica cercando di fare ma che non
>riesco proprio a ottenere.Con 4 non mi funziona (in verita' funziona
>ma non con tutti i record). Se io ti inviassi il file,tu potresti
>dare un'occhiata rapida al filtro?Sono sicuro in pochi minuti
>capiresti dove sbaglio.
allega il file..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jacopominelli Profilo | Newbie

Ok, grazie ancora. Spero non sia troppo confuso il mio DB (cosa credo impossibile). Il form che si chiama consulta e'quello dove non riesco a ottenere risultati perfetti. Nel form consulta mi sembra funzioni tutto tranne quando utilizzo un criterio in categoria e in tema allo stesso tempo. La ricerca si basa sulla query chiamata mainquery.

Nella tbl generale ho inserito pochi record per testare il tutto.
Davvero mille grazie,
J.M.

Dainesi Profilo | Senior Member

Dai un occhio alla tua mainquery":

SELECT general.apellido, general.nombre, general.categoria, general.categoria2, general.ambito, general.tema, general.[tema 2], general.tema3, general.tema4, general.[idioma 1], general.[idioma 2], general.sector, general.comentarios
FROM [general]
WHERE (((general.apellido) Like [Forms]![consulta].[apellido] & "*") AND ((general.categoria) Like [Forms]![consulta].[categoria] & "*") AND ((general.ambito) Like [Forms]![consulta].[ambito] & "*") AND ((general.tema) Like [Forms]![consulta].[tema] & "*") AND ((general.[idioma 1]) Like [Forms]![consulta].[idioma] & "*") AND ((general.sector) Like [Forms]![consulta].[sector] & "*")) OR (((general.apellido) Like [Forms]![consulta].[apellido] & "*") AND ((general.categoria2) Like [Forms]![consulta].[categoria] & "*") AND ((general.ambito) Like [Forms]![consulta].[ambito] & "*") AND ((general.[tema 2]) Like [Forms]![consulta].[tema] & "*") AND ((general.[idioma 2]) Like [Forms]![consulta].[idioma] & "*") AND ((general.sector) Like [Forms]![consulta].[sector] & "*")) OR (((general.apellido) Like [Forms]![consulta].[apellido] & "*") AND ((general.categoria) Like [Forms]![consulta].[categoria] & "*") AND ((general.ambito) Like [Forms]![consulta].[ambito] & "*") AND ((general.tema3) Like [Forms]![consulta].[tema] & "*") AND ((general.[idioma 1]) Like [Forms]![consulta].[idioma] & "*") AND ((general.sector) Like [Forms]![consulta].[sector] & "*")) OR (((general.apellido) Like [Forms]![consulta].[apellido] & "*") AND ((general.categoria2) Like [Forms]![consulta].[categoria] & "*") AND ((general.ambito) Like [Forms]![consulta].[ambito] & "*") AND ((general.tema4) Like [Forms]![consulta].[tema] & "*") AND ((general.[idioma 2]) Like [Forms]![consulta].[idioma] & "*") AND ((general.sector) Like [Forms]![consulta].[sector] & "*"));

vedi un OR corretto ?
No? Ecco allora dove sbagli. Ti sei affidato alla costruzione grafica della query e non hai controllato la sintassi.Quando i filtri sono molteplici affidati ad una costruzione manuale e non grafica. Quest'ultima infatti induce in errore

devi sostituire la clausola WHERE con una che contiene i tuoi filtri per ogni campo. WHERE (campo1 = x OR campo1 = y OR ...) AND (campo2 = a OR campo2 = b OR ...) ... AND (campoN = 1 OR campoN = 2 OR ...)

alx_81 Profilo | Guru

Scusami se non sono ancora riuscito a vedere il db..
Comunque, vedendo la query che Dainesi ha ricavato, non posso fare altro che quotare quanto dice.

>devi sostituire la clausola WHERE con una che contiene i tuoi
>filtri per ogni campo. WHERE (campo1 = x OR campo1 = y OR ...)
>AND (campo2 = a OR campo2 = b OR ...) ... AND (campoN = 1 OR
>campoN = 2 OR ...)
Come ti dicevo nei primi post, devi andare a cambiare il codice SQL e mettere gli OR dove servono, e vedrai che tutto funziona.
ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

jacopominelli Profilo | Newbie

Grazie mille a entrambi, sono riuscito a ottenere il risultato cercato. I vostri consigli sono stati utilissimi.

A questo punto mi sorge un altro piccolo dubbio. Nel form insercion, vorrei infatti fare in modo che il sottoformulario in esso contenuto compaia solo per alcuni record,e magari che si possa attivare facendo click sul comando si o no (e che il form feedbakc si apra con lo stesso record del formulario insercion). Come posso fare?

Grazie ancora,Jacopo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5