Newsgroup: it.comp.appl.access
Titolo: Consiglio su creazione tabella

Ciao a tutti,
sto iniziando ad imparare ms access e per esercizio sto creando una database
che contenga un elenco di contatti.
In particolare, vorrei fare un database con un elenco di persone e, per
ognuna di esse, specificare se hanno partecipato o meno ad un certo numero
di eventi.
Per essere piu' chiaro: scrivo Nome, cognome, indirizzo, data di
nascita...etc (15 campi per l'anagrafica) e poi, per ognuna di queste
persone, voglio specificare se sono andate ad un determinato concerto o no
(per circa 20 concerti).
La via piu' diretta mi sembra quella di fare un'unica tabella che contenga i
15 dettagli anagrafici + i 20 concerti (questi ultimi con valori del tipo 
"SI/NO").
Mi viene pero' fuori una tabella di 35 campi ed ho i dubbi che vada bene
perche :
-1 ) Magari gestire un migliaglio di record per una tabella di 35 campi
rallenta molto l'applicazione, e' cosi'?
-2 ) E' probabile che una persona non sia andata a nessuno dei 20 concerti ,
quindi scriverei tutti NO per i 20 campi
-3 ) Non ho la possibilita' di aggiungere o rimuovere, in un eventuale
necessita' futura, l'elenco dei concerti (per ora non e' previsto)
Per risolvere il problema n. 1, avevo pensato che potrei creare una tabella
a parte con i 20 campi, uno per ogni concerto, e del tipo "SI/NO" e poi fare
una relazione 1 a 1 con l'anagrafica.Questo dovrebbe risolvere parzialmente
anche la 2, giusto?
Un'altra possibilita' mi sembra quella di fare, oltre alla tabella
anagrafica (a 15 campi), un'altra con 3 campi ID_tabella, ID_Anagrafica,
Nome_Concerto e legare le due tabelle con una relazione 1 a molti.
In tal modo, specifico solo i concerti a cui ogni persona ha assistito.
Pero' e' una cosa che mi lascia comunque perplesso, visto che si ripeteranno
un bel po' di dati nei vari records... insomma, qual'e' l'approccio piu' 
"professionale" a
questa situazione?

 ha scritto nel messaggio 
news:g18p7q$7vf$1...@aioe.org...

Due tabelle (Anagrafica) e (Concerti) in relazione tra loro su un campo 
comune [idAnagrafica].
La relazione sarà del tipo Uno a molti Anagrafica->Concerti.
I passi successivi saranno quelli di creare maschere e report con 
sottomaschere e sottoreports che riflettano la relazione impostata.
La normalizzazione ti premierà col Ghiacciolo d'oro per aver ottimizzato la 
struttura del DB.
Scherzi a parte, verrà creato un Concerto solo se necessario.
Potresti anche prendere in esame una struttura un pelo più complessa ma 
ancora più efficiente.
Tre tabelle (Anagrafica) (Concerti) (Partecipazioni), dove (Partecipazioni) 
sia una tabella a campi incrociati che raccoglie un IdAnagrafica e un 
IdConcerto. Questo ti permette di aggiungere un concerto /descrizione e 
qualsivoglia campo) e riportarlo nelle partecipazioni tenendo il DB ben 
normalizzato.
L'approccio alla soluzione non è dettato da una regola precisa. Non vedo 
problemi nella gestione dei 35 campi da parte di Access, ma sicuramente non 
è un approccio pulito ed efficiente.
Esisteva nelle autocomposizioni di Access una applicazione simile credo si 
chiamasse Gestione contatti. Se la trovi fagliela generare e vedrai come 
vengono impostate le tabelle e le maschere ...
IvanDaBologna 

 tenendo il DB ben normalizzato.
Grazie mille, ho fatto cosi'!
Non riesco pero' a trovare il modo giusto per fare questo:
Sono nella maschera anagrafica, premo un pulsante e si chiude la maschera
anagrafica e compare quella delle partecipazioni, per il solo record
correlato nella anagrafica, in modo da poter fare l'aggiunta o la modifica.
Qual'e' il modo che si usa per richiamare, in un'altra maschera, i records
con cui c'e' la relazione?
Ho usato l'autocomposizione, e scelto "maschere associate". Quando
premo sul pulsante della maschera anagrafica, mi apre quella delle
partecipazione, filtrando i records, se gia' inseriti in precedenza.
Succede pero' questo:
Se io inserisco un nuovo record nella maschera "anagrafica" e clicco sul 
pulsante di correlazione,
mi apre la maschera "partecipazioni" , pero' devo io inserire manualmente il 
valore numerico ID_Anagrafica , corrispondente al valore ID della maschera 
Anagrafica. Io vorrei invece che quest'ultimo passaggio fosse fatto 
automanticamente
In pratica, in VBA c'e' questo:
Private Sub FilterChildForm()
    If Me.NewRecord Then
        Forms![Partecipazioni].DataEntry = True
    Else
        Forms![Partecipazioni].Filter = "[ID_Anagrafica] = " & Me.[ID]
        Forms![Partecipazioni].FilterOn = True
    End If
End Sub
Io volevo fare in modo che, nel caso di Me.NewRecord, venisse inserito
automanticamente il valore ID della maschera "Anagrafica" nel campo
ID_Anagrafica della maschera figlia (cioe' di [Partecipazioni]
allora dopo:
  If Me.NewRecord Then
        Forms![Partecipazioni].DataEntry = True
ho inserito
Forms![Partecipazioni].[ID_Anagrafica] = Forms![Anagrafica].[ID]
Pero' non succede nulla!
Dov'e' l'errore?

 Forms![Partecipazioni].[ID_Anagrafica] = Forms![Anagrafica].[ID]
e lancia la maschera, premi il pulsante fino a quando non ti si ferma il 
codice lě sopra.
Fai scorrere il mouse su Forms![Anagrafica].[ID] e controlla che il valore 
nel commento giallino sia quello esatto. In caso contrario riferisciti ad 
uno o tutti e due tramite la sintassi :
Form![nomeMaschera].Controls[nomeControllo]
prova ...
IvanDaBologna