|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
25-10-2012, 17.33.05 | #1 |
Newbie
Registrato: 25-10-2012
Messaggi: 5
|
Problema caselle di controllo
Vi chiedo una cortesia. Premesso che ho access 2007, Ho una tabella Libri, all'interno della quale ho un elenco di libri. Collegata a questa tabella ho una tabella Generi. Libri (id: contatore e primary key, titolo: string, autore: string, data: date) Generi(id: contatore, genere a: logico, genere b: logico, genere c: logico, genere d: logico, genere e: logico, id_libri: foreigh key) MascheraLibri: maschera Ora, premesso che un libro può avere più generi, vorrei che l'utente potesse visualizzare i titoli dei libri che hanno il proprio genere spuntato nella casella di controllo. es: GENERE_A GENERE_B GENERE_C GENERE_D GENERE_E Se io spunto A e B, vorrei che l'utente visualizzasse tutti i libri che hanno TRUE nella tabella generi in genere A e genere B. Questa è la query che ho preparato io: SELECT libri.titolo FROM libri INNER JOIN generi ON libri.ID = generi.id_libri WHERE generi.genere_a=Forms!MascheraLibri!CasellaControl lo1 and generi.genere_b=Forms!MascheraLibri!CasellaControl lo2 and generi.genere_c=Forms!MascheraLibri!CasellaControl lo3 and generi.genere_d=Forms!MascheraLibri!CasellaControl lo4 and generi.genere_e=Forms!MascheraLibri!CasellaControl lo5; il problema è che così facendo, compaiono i libri che hanno true SOLO in genere a e b. Se un libro ha true in A B e D ad esempio, questo non viene visualizzato.... Grazie |
25-10-2012, 20.28.25 | #2 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
Rif: Problema caselle di controllo
Secondo me il database non è ben organizzato.
Hai bisogno di due tabelle e una relazione, per esempio: - Libro (id_libro, titolo, autore, data) - Genere (id_genere, nome) - Appartenenza (id_libro, id_genere) Le relazioni sono molti a molti. id_libro e id_genere sono foreign key per Appartenenza. Comunque il problema della tua query è dovuto alla lettura del dato dalla checkbox. La checkbox restituisce true o false, prova a sostituire true o false nella query e capirai il perchè del problema.
___________________________________
La risposta è dentro di te... e però, è sbagliata! |
26-10-2012, 14.26.46 | #3 |
Newbie
Registrato: 25-10-2012
Messaggi: 5
|
Rif: Problema caselle di controllo
ciao.
Ho seguito il tuo consiglio, ho creato le due tabelle più quella della relazione. tuttavia, anche inserendo la nuova query SQL non funziona: SELECT DISTINCT libri.titolo FROM libri INNER JOIN (Generi INNER JOIN Tabella1 ON Generi.ID=Tabella1.id_generi) ON libri.ID=Tabella1.id_libri WHERE (Forms!Maschera1!CasellaControllo2=True And generi.id=1) Or (Forms!Maschera1!CasellaControllo4=True And generi.id=2) Or (Forms!Maschera1!CasellaControllo6=True And generi.id=3) Or (Forms!Maschera1!CasellaControllo8=True And generi.id=4) Or (Forms!Maschera1!CasellaControllo10=True And generi.id=5); Con questa query, se io ad esempio inserisco tre generi, vengono fuori dei libri che hanno anche solo un genere! invece, essendo i generi dei criteri, vorrei che i risultati in output devono avere ALMENO i criteri selezionati. Mettendo un AND anzichè un OR invece vengono fuori quelli che hanno SOLO i criteri selezionati. Ringrazio calorosamente chi mi darà una mano. |
26-10-2012, 14.53.55 | #4 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
Rif: Problema caselle di controllo
Ah, ho capito, pensavo volessi tutti i libri che appartenessero ad almeno uno dei generi tra quelli selezionati.
Il problema comunque rimane lo stesso: tu nella query imponi che il risultato di alcune checkbox debba essere true, mentre quello di altre debba essere false. La JOIN con "generi" (per convenzione dovrebbe essere "genere", ma le convenzioni non sono univoche) è superflua, dato che nel risultato della query non ti serve scrivere il nome del genere ma solo la lista dei titoli. Anche la query mi sembra da rivedere, prova a "disegnarti" un pezzo della tabella per capire meglio quali sono i campi da valutare. Esempio. Ci sono 5 generi (genere1, genere2, ...) e tu visti la casella dei primi due. La tua query quindi sarà del tipo: SELECT [...] WHERE genere1=true AND genere2=true AND genere3=false AND genere4=false AND genere5=false dove true e false sono i valori che recuperi dalle checkbox. A questo punto diventa evidente il perchè del tuo problema, ossia il fatto che imponi la lettura dei checkbox anche se non vistati.
___________________________________
La risposta è dentro di te... e però, è sbagliata! |
26-10-2012, 15.09.17 | #5 | |
Newbie
Registrato: 25-10-2012
Messaggi: 5
|
Rif: Problema caselle di controllo
Quota:
Avresti qualche consiglio da darmi? Non è strettamente necessario che vi siano queste benedette caselle di controllo, l'unica necessità sostanzialmente è dare la possibilità all'utente di selezionare in qualche modo determinati criteri e che il report mi restituisca tutti i titoli dei libri che soddisfano almeno tutti i criteri selezionati. |
|
26-10-2012, 15.22.32 | #6 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
Rif: Problema caselle di controllo
Ti do un'ulteriore imboccata.
Quando effettui la JOIN tra libro e appartenenza, ottieni una tabella in cui un singolo libro potrà essere presente da 1 a più volte a seconda del numero di generi a cui è associato. Con la clausola WHERE puoi ridurre il numero di queste occorrenze selezionando solo le righe in cui il genere specificato è uno di quelli selezionati. A questo punto ti basta fare un "GROUP BY id_libro HAVING COUNT (DINSTINCT id_genere) >= N" dove N è il numero di generi selezionati per avere solo quei libri in cui sono presenti tutti i generi specificati.
___________________________________
La risposta è dentro di te... e però, è sbagliata! |
28-10-2012, 23.35.06 | #7 |
Newbie
Registrato: 25-10-2012
Messaggi: 5
|
Rif: Problema caselle di controllo
Ciao!
scusa se ti rispondo ora me ero impegnato a realizzare ciò che mi hai detto. Sembra funzionare, grazie mille! mettero il tuo nick fra coloro che hanno collaborato alla realizzazione del mio piccolo database ^^ |
29-10-2012, 09.29.07 | #8 |
Gold Member
WT Expert
Registrato: 23-06-2004
Loc.: Cagliari
Messaggi: 13.333
|
Rif: Problema caselle di controllo
Figurati
Se vuoi inserire qui la query finale, sono curioso di vederla.
___________________________________
La risposta è dentro di te... e però, è sbagliata! |
30-10-2012, 15.37.23 | #9 |
Newbie
Registrato: 25-10-2012
Messaggi: 5
|
Rif: Problema caselle di controllo
EDIT:
Questa è la query finale, te la semplifico un pò xD: SELECT DISTINCT Libro.Titolo, LibroAutore, Libro.Anno [...] FROM Libro INNER JOIN (Genere INNER JOIN Appartenenza ON Genere.ID=Appartenenza.ID_Genere) ON Libro.ID=Appartenenza.ID_libro WHERE (Forms!Maschera_Report!CasellaControllo1=True And genere.id=1) Or (Forms!Maschera_Report!CasellaControllo2=True And genere.id=2) Or (Forms!Maschera_Report!CasellaControllo3=True And genere.id=3) Or (Forms!Maschera_Report!CasellaControllo4=True And genere.id=4) Or (Forms!Maschera_Report!CasellaControllo5=True And genere.id=5) [...] GROUP BY libro.titolo, libro.Autore, Libro.Anno [...] HAVING COUNT(appartenenza.id_genere)>=Forms!Maschera_Repo rt!Contatore; il contatore è una casella di testo che conta le check selezionate Come ti dissi funziona Grazie ancora! |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[Vista] [SP1] - Problema periferiche USB | crWT | Windows 7/Vista/XP/ 2003 | 6 | 20-06-2008 11.28.32 |
[MDV] 2006 - problema kde | juggler | Linux e altri Sistemi Operativi | 4 | 29-12-2006 20.06.08 |
Problema controllo file system ntfs | fabius1983 | Windows 7/Vista/XP/ 2003 | 1 | 17-09-2004 10.17.51 |
Problema indeterminato !! Help :°°° | Poseidon | Hardware e Overclock | 20 | 10-06-2004 12.04.51 |
Problema con la masterizzazione... la colpa è della Audigy!!! Qualche idea??? | LaBrie | Windows 7/Vista/XP/ 2003 | 13 | 31-01-2004 14.28.25 |