Newsgroup: it.comp.appl.access
Titolo: [newbie] Filtro basato su più campi

Ciao a tutti
Continuando ad implementare il mio db di film sono arrivato ad un buon punto 
ma mi scontro con la mia inesperienza da newbie :(
In pratica il problema che si pone ora č questo:
Ho una tabella Attori che contiene2 campi: l'IdAttore e il campo testo con 
il nome dell'attore (che ho chiamato Player).
Nella tabella film ho inserito il campo IdAttore, IdAttore2, IdAttore3 (in 
pratica posso inserire 3 attori per ogni film - diciamo protagonista e 2 
co-protagonisti)
Nella maschera ho i 3 campi (IdAttore, IdAttore2, IdAttore) ognuno in una 
casella combinata da cui scegliere l'attore per inserirlo (ovviamente 
l'origine dei nomi degli Attori č sempre e solo la tabella Attori cioč 
l'origine riga č
SELECT Attori.IDAttore, Attori.Player FROM Attori ORDER BY Attori.Player;
E fin qui tutto bene: nella maschera inserisco i 3 attori (o meno) per ogni 
singolo film e funza.
Ora vorrei fare in modo di ricercare tutti quei film che hanno come attore 
uno in particolare che viene filtrato da un'altra casella combinata nel suo 
evento dopo aggiornamento , cosě: (il codice non č mio, non sono cosě bravo, 
l'ho riadattato fin dove son stato capace)
Private Sub CasellaCombinata76_AfterUpdate()
If CasellaCombinata76 = 0 Then
    Me!ElencoAttori = " < Tutti gli attori >"
    Me!ElencoAttori.FontBold = True
    Me.Filter = ""
    Me.FilterOn = False
    Lista = ""
Else
    Me!ElencoAttori.FontBold = False
    If Lista = "" Then
        Lista = Me!CasellaCombinata76.Column(0)
        Me!ElencoAttori = Me!CasellaCombinata76.Column(1)
    Else
        Lista = Lista & "," & Me!CasellaCombinata76.Column(0)
        Me!ElencoAttori = Me!ElencoAttori & ", " & 
Me!CasellaCombinata76.Column(1)
    End If
    Me.Filter = "IdAttore IN (" & Lista & ")"
    Me.FilterOn = True
End If
End Sub
(ElencoAttori č il nome di una casella di testo dove mi fa vedere il valore 
attuale)
E fin qua tutto bene (dalla casella combinata filtro l'attore (che viebne 
scelto in IdAttore e visualizzo tutti i film con quell'attore ma SOLO se č 
presente nel primo dei tre campi)...
Non so come creare la condizione in cui filtro l'attore non solo in base al 
campo della maschera IdAttore ma anche dagli altri 2 (Idattore2 e 
IdAttore3)...cioč come aggiungo al filtro condizioni AND ? non so proprio la 
sintassi e se sto seguendo il giusto procedimento...
Come devo cambiare la riga
 Me.Filter = "IdAttore IN (" & Lista & ")"
per soddisfare piů criteri?
O dove ho sbagliato...
Grazie scusate la logorrea
Ciao
J
 

 ha scritto nel messaggio 
news:4381d1e5$0$27594$4faf...@reader1.news.tin.it...

Ciao J,
scusa se non rispondo alla tua domanda in maniera diretta.
Anche a me piace il mondo della celluloide ( una volta!) e quindi mi diletto 
a tenere un piccolo database.
Perň ho strutturato le tabelle in maniera da essere 'distinte' tra di loro. 
Ho la tabella Film con titolo, sottotitolo e titolo originale, gli altri 
campi poggiano tutti su tabelle collegate. Per esempio la produzione puň 
essere di un solo paese o coprodotta da piů paesi (vedi gli spaghetti 
western, dove c'erano coproduzioni italo-ispano-franco-tedesche!).
Legando una tabella che contenga l'IDfilm e l'IDnazione, posso elencare 
tutte le nazioni che hanno partecipato.
Anche per le 'persone' ho ragionato in questo senso. Non saprň mai a priori 
quante persone hanno partecipato alla realizzazione di un film, e quindi ho 
creato una tabella di legame che contiene l'IDpersona e  l'IDruolo ( e anche 
l'eventuale nome del personaggio interpretato). Cosě risolvo i films che 
hanno il regista che sceneggia e interpreta anche un ruolo, o un cameo.
Ti consiglio di spezzettare (normalizzare) i dati su piů tabelle. La ricerca 
sembra piů complicata, ma alla fine rende merito alle informazioni nel 
momento in cui le vai a cercare.
Strutturata in questo modo l'informazione, mi 'risulta' quasi tutto con 
delle semplici maschere e sottomaschere collegate.
-- 
... spero di esserti stato d'aiuto, (facci sapere)
Ivan

 Ivan
Ciao, grazie per la risposta...
In realtà anch'io ho varie tabelle (Attori, Registi, Tipo di Registrazione, 
Genere, Anno ecc) relazionati tramite gli Id alla tabella film che contiene 
i vari Id relazionati alle singole tabelle (creati con la ricerca nella 
struttura tabella di "tabella Film").
L'unica cosa che non sono stato in grado di creare "sensatamente" riguarda 
la tabella attori.
Poichè volevo tutti gli attori in un'unica tabella più semplice da gestire 
ho creato nella tabella film 3 campi (IdAttore, IdAttore2, IdAttore3) che 
come origine riga e relazione hanno sempre questa tabella Attori.
Sicuramente sbaglio qui ma sono nuovo nuovo di Access :)
Ho fatto così perchè non so come fare in modo di avere 3 comandi (caselle 
combinate) nella maschera che mi peschino gli attori da un'unica tabella 
(immagino che stia qui tutto il pasticcio).
Poi nasce il problema del filtro (in pratica dovrebbe essere un filtro in 
base maschera, credo) ma ritengo che sicuramente il problema è di come ho 
strutturato le tabelle...
In pratica: come posso inserire gli attori in un'unica tabella e fare in 
modo poi di poterli scegliere in 3 distinte caselle combinate nella maschera 
(attore principale, co-protagonista1, co-protagonista2) e riuscire a 
filtrarle tutte da un'altra casella combinata nel caso cercassi un attore in 
tutti i 3 ruoli?
Scusa la spiegazione incasinata...
Grazie ciao
J 

 ha scritto nel messaggio 
news:4382dadb$0$13270$4faf...@reader2.news.tin.it...
[...]

Ehilà J,
il problema delle caselle combinate che pescano dalle persone lo risolvi con 
una sottomaschera (continua) legata alla maschera film tramite idFilm.
Io ho impostato una tabella di collegamento ( che mi funge da tabella 
molti-molti).
I campi sono semplici
film         (numerico) ---- contiene l'idFilm
persona  (numerico) --- " l'idPersona
ruolo       (numerico) --- " l'idRuolo
nota        (testo)     ---  ci scrivo il nome del personaggio
come vedi, a parte l'ultimo, ci sono tre campi numerici! praticamente è 
illeggibile da sola, ma 'collega' film e persone (e anche ruoli) permettendo 
più presenze identiche in qualsiasi campo.
Questa tabella diventa l'origine della sottomaschera e ti permette 
inesrimenti all'infinito per ogni film. Per risolvere la visualizzazione dei 
nomi ( al posto dei numeri) ho trasformato i campi (film, persona,ruolo) in 
caselle combinate a due colonne.
L'origine delle varie caselle poggia su una query(ad hoc per ognuna) che 
mostri solo: idFilm e titolo dalla tabella Film, idPersona e Cognome & Nome 
dalla tabella Persone, idRuolo e Ruolo dalla tabella Ruoli.
 La prima colonna è il numero(l'id) e la seconda il nome associato, poi 
mettendo larghezza della prima colonna a ZERO(0) e quella della seconda 
colonna adeguatamente ampia, ottengo la sola visualizzazione del testo.
Come vedi ci sono vari livelli a cui accedere per ottenere il risultato che 
vuoi.
E infine: continua  a provare! il risultato so ottiene migliorando e, 
spesso, rivedendo il metodo e le procedure.
Ivan 

"Ivan da casa"  ha scritto nel messaggio > Ehilà J,

Grazie, un'amica (dopo avermi detto giustamente che la struttura per far la 
cosa deve essere ottenuta tramite relazione molti a molti e tabella esterna) 
mi ha corretto il codice mantenendo la struttura attuale ("sbagliata") e 
facendomi funzionare la cosa...
Ecco la parte che mi ha sostituito per conoscenza
Com'era
    ...Me.Filter = "IdAttore IN (" & Lista & ")"
    Me.FilterOn = True
 ...
com'è:
   ... Me.Filter = "IdAttore = " & Lista & " or IdAttore2 = " & Lista & " or 
IdAttore3 = " & Lista
    Me.FilterOn = True
...
Grazie, e hai ragione... dovrei studiare access dalle basi, capisco che 
partire in quarta senza sapere come ottenere correttamente le cose è 
sbagliato...
Ciao
J

 J
Ciao J,
ci sono sempre due momenti nell'affrontare ( e risolvere un problema).
Il primo è quello ch in un modo o nell'altro si possa proseguire.
Il secondo dipende dal dubbio. Senza il dubbio 8 cioè la consapevolezza di 
più alternative) non esiste miglioramento.
Quindi sono d'accordo con te. Anch'io metto in piedi dei ragionamenti e li 
porto avanti finchè posso. Magari poter avere dei dubbi!
Anche io, non collaborando con molti altri (tranne che su questo NG), non 
vengo a conoscenza di alternative che magari alleggerirebbero il mio lavoro.
Però quando conosci, magari la prox volta affronterai il problema sapendo di 
avere a disposizione più attrezzi per risolverlo.
La soluzione della tua amica è perfetta, sulla struttura che hai progettato. 
Al prossimo progetto, lasciati più libertà di inserimenti, prevedendo 
tabelle a sostegno.
E' stata una bella chiacchierata. Alla prox
Ivan