Newsgroup: it.comp.appl.access
Titolo: Ricerca in più campi

Ciao a tutti,
Ho questo problema:
Nel dbase in tabella x ogni iscritto ho inserito due campi: Lingua1 e lingua
2 per sapere il tipo di lingua conosciuta da ogni soggetto inserito in
tabella..
Ad esempio 1 soggetto puo conoscere "Inglese" e "Arabo"
Un altro invece "Francese e "Inglese"
o anche "Arabo" e " Tedesco"
Ho creato una maschera di riepilogo dei dati di un soggetto con l'ausilio di
una listbox..
faccio quasi tutto da codice nella casella di riepilogo ho solo impostato il
numero di colonne e le loro dimensioni..
Nella tabella principale ho inserito apposta un campo denominato Lingua.
Io vorrei che quando vado a far visualizzare l'elenco dei soggetti x lingua
conosciuta nella listbox, venissero confrontati i valori dei campi lingua1 e
lingua2 e poi il risultato venisse memorizzato nel campo Lingua che sarebbe
il campo visualizzato nella casella di riepilogo.
Cioe se io volessi vedere tutti coloro che conoscono l'Inglese, la ricerca
dovrebbe includermi anche il valore di Lingua2 e non solo quello di
lingua1..
Ho provato con le query a campi incrociati ma non ci sono riuscito..
Sapete come potrei fare?
grazie mille per l'aiuto...
Ludo..
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:81Z211Z235Z161Y...@usenet.libero.it...

Molto confusa la tua richiesta.
Se ho ben capito nella tabella X ci sono tre campi lingua: lingua, lingua1 e 
lingua2; se è così un campo (lingua) è superfluo.
Può anche essere che usi due tabelle...non si capisce.
Cosa vuol dire "venissero confrontati i valori dei campi lingua1 e lingua2"?
Possono avere lo stesso valore? Hanno sempre un valore diverso?
Vuoi fare una ricerca multicampo? Del tipo in una riga criteri di una query: 
like "Inglese" e nella riga sottostante della colonna successiva: Like 
"Arabo"; come questa?
SELECT Anagrafica.Lingua2, Anagrafica.Lingua1
FROM Anagrafica
WHERE (((Anagrafica.Lingua2) Like "Inglese")) OR 
(((Anagrafica.Lingua1)="Arabo"));
Fammi sapere.
Ciao, Carlo 

 cerco di spiegarmi meglio....
Ho una tabella iscritti dove ci sono i campi interessati lingua1 e
lingua2..che accolgono le lingue conosciute dai soggetti memorizzati i dbase
e in altre tabelle, l'elenco delle lingue, delle patenti etc..
ho creato una maschera di ricerca dove ho inserito un gruppo di opzioni per
impostare i criteri di ordinamento (età, patente,lingua, anno di
iscrizione), una casella combinata (che ha come origine tabella a seconda
del criterio impostato una query unione diversa, ad esempio querypatente o
querylingua che mi visualizzano lelenco di patenti o lingue) e una listbox
dove viene visualizzato lelenco dei record con un campo che varia a seconda
del criterio di ordinamento impostato..
Il codice su dopo aggiornamento della casella combinata è:
If CasellaCombinata = 0 Then
      Me.Filter = ""
      Me.Filter = False
 Else
          Me.Filter = "[id] = " & Me!CasellaCombinata
          Me.FilterOn = True
 End If
      Me.ListType.Requery
      Me.ListType = UCase(Me.ListType)
      AggiornaNum
Il rowsource della combobox e della listbox lo gestisco da codice a seconda
dell'opzione selezionata.
Quindi se seleziono ad esempio dal gruppo di opzioni Patente, in listbox mi
viene visualizzato
Cognome Nome, Tipo Patente.
Dalla combobox se seleziono ad esempio patente A, in listbox vengono
visualizzati tutti quei record che hanno la patente A.
Per le patenti il problema non mi si pone perchè le patenti vanno in un
unico campo, mentre per le lingue i campi sono due...
Ad esempio ho:
soggetto A con lingua1 : Inglese Lingua2: Tedesco
Soggetto B con lingua1: Tedesco Lingua2: Francese
e Soggetto C con lingua1:Tedesco Lingua2: Inglese
Nel rowsource della listbox metto select iscritti.num,
iscritti.cognome,......iscritti.lingua1,iscritti.lingua2, lingua from
iscritti........
Dalla casella combinata se io seleziono ad esempio "inglese", vorrei che
venissero visualizzati i record in questo modo :
Cognome nome, Lingua e non Cognome nome LIngua1, Lingua2
sogg A Inglese Soggetto A Inglese Tedesco
Sogg C Inglese Soggetto C Tedesco Inglese
Volevo andar a ricercare la lingua selezionata in casella combinata sia in
lingua1 e lingua2 e poi visualizzarla nel campo Lingua nella listbox...
Spero di essere stato 1 po piu chiaro, ma a volte mi sa mi complico la vita
inutilmente..
grazie mille..
ludo..


 ha scritto nel messaggio 
news:83Z176Z120Z98Y1...@usenet.libero.it...

Visto che le lingue provengono da due campi e non solo da uno, hai necessità 
di sapere quali valori si trovano in entrambi i campi. Questo solo se non 
hai una tabella lingue con l'elenco di tutte, ma proprio tutte le lingue.
Nel primo caso la combo deve alimentarsi da un elenco formato da tutte le 
lingue, prese una sola volta, sia dal primo che dal secondo campo lingue.
E' chiaro fino ad ora?
Se è chiaro vediamo come ricavare un elenco unico...
Io faccio così (ma potrebbero esserci altre strade): una prima query con i 
valori di Lingua1 (SQLingua1):
SELECT Anagrafica.Lingua1 AS Lingue
FROM Anagrafica
GROUP BY Anagrafica.Lingua1;
Una seconda query con i valori di lingua2 (SQLingua2:
SELECT Anagrafica.Lingua2 AS Lingue
FROM Anagrafica
GROUP BY Anagrafica.Lingua2;
Una terza query con l'unione delle prime due (UnioneQueryLingue):
SELECT * from SQLingua1
UNION ALL select * from SQLingua2;
Finalmente la quarta query con i valori presi una sola volta 
(SQLingueUtilizzate):
SELECT UnioneQueryLingue.Lingue
FROM UnioneQueryLingue
GROUP BY UnioneQueryLingue.Lingue;
Sarà quest'ultima ad alimentare la combo lingue: SQLingueUtilizzate
A questo punto il lavoro è facile perchè selezionato il valore dalla combo 
andrai a verificare sia nel campo Lingua1 che nel campo Lingua2 se è 
presente (OR).
Le cose sono diverse se hai usato (come spero) una tabella Lingue. In questo 
caso sarà questa tabella ad alimentare la combo. Il resto è identico.
Ciao, Carlo