Newsgroup: it.comp.appl.access
Titolo: ho ereditato una tabella Excell in Acces...

e dall'analisi dei dati ho riscontrato che si possono ricavare almeno due
tabelle: corsi e allievi. Nella Tabella Excell ci sono più record per lo
stesso allievo ma che contengono informazioni su corsi diversi. Vorrei
creare le due tabelle suddette e creare una relazione 1 (allievo) molti
(corsi) e poi gestirle con maschera e sottomaschera. Il guaio è come creare
nella tabella corsi (molti) la chiave esterna?
Ho pensato di creare una campo prima di spezzare la tabella e copiarvi gli
stessi valori della chiave primaria di allievi, ma non risolvo il problema:
mi ritrovo due o più nomi uguali ai quali sono relazionati un numero
corrispondente di corsi. La soluzione è farlo a mano... ma sono più di 3.000
record!
Come posso fare? Grazie 3000
--
Saluti
NSantini

 record!
Forse semplifichi se invece di pensare a come estrarre la tabella CORSI crei
invece quella ALLIEVI estraendo i dati che ti servono con una query di
creazione e totali di raggruppamento ... Per quanto riguarda la relazione
tra le due tabelle potresti basarti su nome e cognome oppure ricorrere ad un
ID (alfanumerico o numerico) che poi riporterai con una query di
aggiornamento sulla tabella CORSI.
OndaMax

 ha scritto nel messaggio
news:1h5%6.5218$_F1....@news2.tin.it...

Io direi che la tabella alunni e la tabella corsi dovranno essere in
relazione molti-a-molti e non uno-a-molti come tu dici; infatti, se è vero
che un alunno segue più corsi, è altrettanto vero che un corso è seguito da
più alunni.
Da ciò si desume che dalla tua tabella (che chiameremo TabellaExcel) dovrai
creare tre e non due tabelle:
1) La tabella tblAlunni che conterrà l'anagrafica degli alunni.
2) La tabella tblCorsi che conterrà l'elenco di tutte le materie.
3) La tabella tblAlunniCorsi che servirà a realizzare la relazione
molti-a-molti tra le due precedenti tabelle.
Se TabellaExcel ha la seguente struttura:
CognomeAlunno    Testo
NomeAlunno         Testo
Corso                    Testo
Creati una tabella tblAlunni che abbia la seguente struttura:
IDAlunno                Contatore e chiave primaria
CognomeAlunno     Testo
NomeAlunno          Testo
Creati poi una tabella tblCorsi che abbia la seguente struttura:
IDCorso                Contatore e chiave primaria
Materia                  Testo
Creati infine una tabella tblAlunniCorsi che abbia la seguente struttura:
IDAlunniCorsi        Contatore e chiave primaria
IDAlunno               Numerico
IDCorso                Numerico
A questo punto creati una relazione uno-a-molti tra tblAlunni e
tblAlunniCorsi in base ai campi IDAlunno; creati anche una relazione
uno-a-molti tra tblCorsi e tblAlunniCorsi in base ai campi IDCorso. Aggiungi
a queste due relazioni l'integrità referenziale.
Ora creati una maschera che contenga solamente un pulsante di comando e a
fronte dell'evento "Su clic" del pulsante di comando genera il seguente
codice VBA:
Dim rsExcel As Recordset
Dim rsAlunni As Recordset
Dim rsCorsi As Recordset
Dim rsAluCor As Recordset
Dim rsQuery1 As Recordset
Dim rsQuery2 As Recordset
'popola tblAlunni
Set rsQuery1 = CurrentDb.OpenRecordset("SELECT " & _
"TabellaExcel.CognomeAlunno," & _
" TabellaExcel.NomeAlunno FROM TabellaExcel" & _
" GROUP BY TabellaExcel.CognomeAlunno, " & _
"TabellaExcel.NomeAlunno;")
Set rsAlunni = CurrentDb.OpenRecordset("tblAlunni")
rsQuery1.MoveFirst
Do Until rsQuery1.EOF
    rsAlunni.AddNew
    rsAlunni!CognomeAlunno = rsQuery1!CognomeAlunno
    rsAlunni!NomeAlunno = rsQuery1!NomeAlunno
    rsAlunni.Update
    rsQuery1.MoveNext
Loop
Set rsAlunni = Nothing
Set rsQuery1 = Nothing
'popola tblCorsi
Set rsQuery2 = CurrentDb.OpenRecordset("SELECT " & _
"TabellaExcel.Corso FROM TabellaExcel " & _
"GROUP BY TabellaExcel.Corso;")
Set rsCorsi = CurrentDb.OpenRecordset("tblCorsi")
rsQuery2.MoveFirst
Do Until rsQuery2.EOF
    rsCorsi.AddNew
    rsCorsi!Materia = rsQuery2!Corso
    rsCorsi.Update
    rsQuery2.MoveNext
Loop
Set rsCorsi = Nothing
Set rsQuery2 = Nothing
'popola tblAlunniCorsi
Set rsExcel = CurrentDb.OpenRecordset("TabellaExcel")
Set rsAluCor = CurrentDb.OpenRecordset("tblAlunniCorsi")
rsExcel.MoveFirst
Do Until rsExcel.EOF
    rsAluCor.AddNew
    rsAluCor!IDAlunno = DLookup("[IDAlunno]", "tblAlunni", _
    "CognomeAlunno=" & Chr$(34) & rsExcel!CognomeAlunno & Chr$(34) _
    & " AND NomeAlunno=" & Chr$(34) & rsExcel!NomeAlunno & Chr$(34))
    rsAluCor!IDCorso = DLookup("[IDCorso]", "tblCorsi", _
    "Materia=" & Chr$(34) & rsExcel!Corso & Chr$(34))
    rsAluCor.Update
    rsExcel.MoveNext
Loop
Set rsExcel = Nothing
Set rsAluCor = Nothing
A questo punto apri questa maschera e pigia il pulsante di comando: con i
dati della TabellaExcel ti verranno popolate automaticamente le tre tabelle
tblAlunni, tblCorsi e tblAlunniCorsi.
Risolto il problema della creazione delle tabelle, creati una maschera con
visulizzazione a Machere continue: chiamala Sottomaschera e fai in modo che
abbia come origine record la tabella tblAlunniCorsi; nella form
Sottomaschera inserisci solo due controlli: il primo chiamalo IDCorso ed
associalo al campo IDCorso di tblAlunniCorsi, il secondo controllo deve
essere una casella di testo non associata nella cui origine controllo devi
scrivere:
=DLookUp("[Materia]";"tblCorsi";"IDCorso=" & [IDCorso])
Ora creati una maschera ( chiamala MascheraAlunni) con visualizzazione a
Maschera singola che abbia come origine record tblAlunni e ne visualizzi
tutti i sui campi; in MascheraAlunni inserisci anche un controllo
sottomaschera che dovrà avere come Oggetto origine la form Sottomaschera e
dovrà avere, sia come Collega campi secondari che come Collega campi master,
IDCorso.
Così facendo, quando aprirai MascheraAlunni, nella sottomaschera vedrai i
corsi seguiti dall'alunno il cui record è corrente nella maschera
principale.
Spero che fosse ciò che ti serviva.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Io direi che la tabella alunni e la tabella corsi dovranno essere in
[CUT]

[CUT]
Accipicchia, Robe'
l'aria di campagna ti fa un benefico effetto. Grazie per il suggerimento
rapido ed esaustivo.
Devo adattarla meglio alle mie esigenze e la provero'.
--
Saluti
NSantini

 NSantini
Qui in collina l'aria č ottima, il mangiare ed il bere ancora meglio: non č
possibile non giovare di un benefico effetto.
Per domani ho organizzato una scorribanda gastronomica in quel di Spello:
poi ti racconto. :-)))
