Newsgroup: it.comp.appl.access
Titolo: Ancora su query con numero variabile di  parametri (1..n)

Mi scuso se la domanda è stata già posta altre volte.
Dunque query con un numero di parametri da 1 a n
uno studente conosce da una a piu' lingue
tabella studenti
tabella lingue
tabella id_studenti-id_lingua
devo scrivere una query che selezionando da una maschera (con una
ListBox a selezione multipla) mi permetta di di trovare gli studenti
che parlino una lingua oppure due o più lingue contemporaneamente.
con le prove che ho fatto (usando like o una tabella temporanea esterna
dove salvo i parametri richiesti) non sono riuscito a ottenere lo scopo
richiesto (tipo se selezione inglese *e* francese ottengo quelli che
parlano inglese,francese e inglese e francese)
un consiglio a un povero ragazzo con un feroce mal di testa da
influenza autunnale?
grazie

 ha scritto nel messaggio 
news:1160059975.7...@i3g2000cwc.googlegroups.com...







grazie
_________________________________
Aggiungi alla tabella studenti un campo logico "POLIGLOTTA".
Se vuoi solo gli studenti che parlano due o + lingue scrivi:
SELECT STUDENTI.STUDENTE, LINGUE.LINGUA
FROM STUDENTI INNER JOIN LINGUE ON STUDENTI.ID_STUD = LINGUE.ID_STUD
WHERE (((STUDENTI.POLIGLOTTA)=True));
Una sola lingua: (STUDENTI.POLIGLOTTA)=False
Ciao.
eSQueL

 Se vuoi solo gli studenti che parlano due o + lingue scrivi:
mhhh ma così se seleziono 3 lingue, non trovo anche quelli che ne
parlano 2?
grazie

 Se vuoi solo gli studenti che parlano due o + lingue scrivi:
mhhh ma cosě se seleziono 3 lingue, non trovo anche quelli che ne
parlano 2?
grazie
Veramente, qui non selezioni N lingue, ma 1 studente. Lo studente  č 1 e le
lingue sono tante. Se vuoi cambiare logica e usare le diverse lingue come PK
devi cambiare la struttura delle tabelle: 1 lingua - tanti studenti. Come
credi.
Ciao.
eSQueL

 devi cambiare la struttura delle tabelle: 1 lingua - tanti studenti. Come
forse mi sono spiegato male:
allora ogni studente parla da 1 a n lingue
la mia query deve poter selezionare gli studenti che parlano tutte (non
una delle) lingue che indico.
per fare questo ho fatto una tabella degli studenti una delle lingue e
una che relaziona studenti e lingue.
ho fatto una maschera con list_box dove posso selezionare le lingue che
mi interessano ma le query che ho fatto fino ad ora usando ad esempio
[Studenti - Lingue].Id_Lingua Like
Nz([Forms]![StudentiRicerca-parametri]![Lingua],"*")
mi riportano anche gli studenti che parlano una sola delle lingue che
ho selezionato, mentre io volevo gli studenti che parlano tutte le
lingue che seleziono contemporaneamente.
ancora grazie
(e l'influenza non è ancora passata)

 ha scritto nel messaggio 
news:1160120948.3...@i3g2000cwc.googlegroups.com...







__________________________________
1) Aggiungi un campo logico a STUDENTI (parto dal presupposto che STUDENTI e 
LINGUE siano in relazione 1-molti);
2) Crei "query1" in access in questo modo:
SELECT STUDENTI.STUDENTE, STUDENTI.POLIGLOTTA, LINGUE.LINGUA
FROM STUDENTI INNER JOIN LINGUE ON STUDENTI.ID_STUD = LINGUE.ID_STUD
WHERE (((STUDENTI.POLIGLOTTA)=True));
3) Aggiungi ad un pulsante questo codice:
Private Sub Cmd_Click()
    Dim rs1 As New ADODB.Recordset
    Dim lngi As Long
    lngi = Me.Elenco.ItemsSelected.Count
    rs1.Open "SELECT DISTINCTROW Query1.STUDENTE, Count(*) AS [Conteggio Di 
LINGUE]" & _
            "FROM Query1 " & _
            "GROUP BY Query1.STUDENTE " & _
            "HAVING (Count(*))=" & lngi & " ", CurrentProject.Connection, 
adOpenKeyset, adLockOptimistic
    Debug.Print rs1.Fields(0)
'E' restituito un recordset con tutti gli studenti che poi userai come 
meglio credi.
Ciao
eSQueL
End Sub

proviamo a farla piu semplice.
diciamo che ho solo tre lingue
inglese
francese
tedesco
metto tre campi si/no nella tabella studenti (una per lingua)
e uso un form con dei check box uno per ogni lingua.
se selezioni un box voglio ricavare tutti quelli che parlano quella
lingua
se seleziono due box quelli che parlano due lingue
se seleziono  tre box quelli che parlano tre lingue
se uso una query del tipo
WHERE
(Studente.Inglese)=[Forms]![StudenteRicerca-parametri]![inglese_box]
AND
(Studente.Francese)=[Forms]![StudenteRicerca-parametri]![francese_box]
AND
(Studente.Tedesco)=[Forms]![StudenteRicerca-parametri]![tedesco_box]
se seleziono 1 lingua es inglese trovo solo quelli che parlano inglese
e non quelli che parlano inglese e francese.
come si risolve questa? (senza aggiungere campi
monoglotta/biglotta/triglotta/...)
grazie
(non esiste una faq per le query con un numero variabile di parametri?
quelle che avevo visto su sito comune avevano il problema che se si
selezionavano due lingue mi ritornavano anche gli studenti che
parlavano una sola delle due lingue selezionate)
grazie
(e linfluenza è passata)

 ha scritto nel messaggio 
news:1160401950.0...@h48g2000cwc.googlegroups.com...










_________________________________
Ma perché vuoi tre checkbox? :) Acchetteservono? E perché non hai nemmeno 
provato a fare come ti ho indicato? :))
Nel modo che ti ho indicato se selezioni 3 lingue ottieni gli studenti che 
parlano 3 lingue, se 2 ... 2, se 10 ... 10 (non funziona solo se selezioni 
una sola lingua!)
Il campo logico è uno solo e sta nella tabella "STUDENTI" perché riguarda lo 
studente, non le lingue parlate. Così, quando il campo è spuntato *quello* 
studente parla più di 1 lingua.
Sfinito :(
Ciao.
eSQueL