Ho dimenticato di dire che ho anche una tabella
Interpretazioni con i campi
IDInterpretazione (PK)
IDInterprete (FK)(prende valori da Artisti.IDArtista)
Ruolo
IDDS (FK)
quindi relazione DettagliSupporti.IDDS uno-a-molti Interpretazioni.IDDS
Va considerato, faccio un esempio tipico che mi capita spesso, ho un Supporto (scatola) che raccoglie i vari numeri di una Rivista. All'interno di ogni rivista ci sono i singoli Testi/Articoli dei giornalisti. In questo caso un Titolo-Testo non lo troverò mai nella tabella Titoli (così come non si ripeterà mai in futuro). Inoltre l'Artista/Giornalista è sia Autore, sia Interprete e certamente unico.
Ho creato una tabella appoggio
DSX che include sia campi di Titoli, sia di DettagliSupporti, ossia:
IDDSX (PK)
Indice
Segnalibro
IDAutore1
Articolo
Titolo
CatTitolo
Genere
IDAreaGeo
Epoca
Grandezza
Dopo averla compilata, clicco su un pulsante AggiornaTutto che:
1. Accoda i campi relativi a Titoli in Titoli (query
DSXinT).
2. Una query UT mi filtra gli ultimi nuovi record di Titoli, quindi mi accoda in Autorità i campi IDTitolo, IDAutore (query
UTinAutorità).
3. A questo punto devo aggiornare DettagliSupporti. Siccome il numero record di DSX e UT è uguale, posso ciclarli insieme e impostare in DettagliSupporti.
4. Una query UDS mi filtra gli ultimi nuovi record di DettagliSupporti, quindi accoda in Interpretazioni (query
UDSinInterpretazioni).
5. Al termine elimino tutti i record da DSX.
Allego il codice del pulsante AggiornaTutto
Private Sub AggiornaTutto_Click()
DoCmd.Close acForm, "DSX"
Dim DB As DAO.Database
Dim rsDSX As DAO.Recordset, rsUT As DAO.Recordset, rsUDS As DAO.Recordset, rsDS As DAO.Recordset
'Accodamento da DSX in Titoli
DoCmd.OpenQuery "DSXinT"
'Accodamento da UT (UltimiTitoli) in Autorità
DoCmd.OpenQuery "UTinAutorità"
Set DB = CurrentDb
'Trasferimento dati in DettagliSupporti sfruttando DSX e UT
Set rsDSX = DB.OpenRecordset("DSX", dbOpenDynaset)
Set rsUT = DB.OpenRecordset("UT", dbOpenDynaset)
Set rsDS = DB.OpenRecordset("DettagliSupporti", dbOpenDynaset)
rsDSX.MoveFirst
rsUT.MoveFirst
Do Until rsDSX.EOF And rsUT.EOF
rsDS.AddNew
rsDS!Indice = rsDSX!Indice
rsDS!Segnalibro = rsDSX!Segnalibro
rsDS!IDTitolo = rsUT!IDTitolo
rsDS!Grandezza = rsDSX!Grandezza
rsDS!IDSupporto = Forms!Supporti!IDSupporto
rsDS.Update
rsDSX.MoveNext
rsUT.MoveNext
Loop
rsDS.Close
rsUT.Close
rsDSX.Close
DB.Close
'Accodamento da UDS (UltimiDettagliSupporti) in Interpretazioni
DoCmd.OpenQuery "UDSinInterpretazioni"
'Eliminazione dati da DSX
DoCmd.RunSQL "DELETE * FROM DSX;"
Forms!Supporti!DettagliSupporti.Requery
End Sub
Forse Forms!Supporti!DettagliSupporti.Requery è superflua?