Ho una tabella Direzioni con i seguenti campi:
IDDirezione (PK)
Anno
IDBand (FK)(rappresenta una Banda o Orchestra...alla quale ogni Anno viene associato un Direttore)
IDDirettore (FK)
Fonte
Indice
Manifesto
Pieghevole
Foto
A livello di questa tabella ho la necessità di strutturarla così perchè per ogni Anno la combinazione valori dei campi da Fonte a Foto può essere diversa (anche a parità di valori IDBand e IDDirettore).
Ho creato 2 query DirezionixCittàBand e DirezionixDirettore per elencare rispettivamente in ordine alfabetico ogni CittàBand Anno per Anno con il corrispondente Direttore (viceversa ogni Direttore Anno per Anno con la corrispondente CittàBand).
Queste 2 query mi elencano tutti i record Anno per Anno e, non fosse altro che devo tracciare anche i campi da Fonte a Foto, funzionano.
Tuttavia nel gergo musicale, quando si vogliono elencare le Direzioni di ogni CittàBand, solitamente si preferisce mostrare:
Periodo | CittàBand | Direttore
dove nel campo Periodo puoi trovare scritto per esempio 1990 - 1998.
Attualmente sono riuscito sfruttando una tabella di appoggio DirezioniPeriodi con i campi:
IDDP (PK)
Periodo
Band (quando dico Band o CittàBand significano la stessa cosa)
Direttore
e con questo codice
Private Sub CompilaDirezioniPeriodi_Click()
DoCmd.RunSQL "DELETE * FROM DirezioniPeriodi"
Dim MyDB As DAO.Database
Dim rsDxCB As DAO.Recordset, rsDP As DAO.Recordset
Dim strBand1 As String, strBand2 As String, strDirettore1 As String, strDirettore2 As String
Dim intAnno1 As Integer, intAnno2 As Integer, I As Byte
Set MyDB = CurrentDb
Set rsDxCB = MyDB.OpenRecordset("DirezionixCittàBand", dbOpenDynaset)
Set rsDP = MyDB.OpenRecordset("DirezioniPeriodi", dbOpenDynaset)
rsDxCB.MoveFirst
Do Until rsDxCB.EOF
intAnno1 = rsDxCB!Anno
strBand1 = rsDxCB!Band
strDirettore1 = rsDxCB!Direttore
A:
rsDxCB.MoveNext
I = I + 1
intAnno2 = rsDxCB!Anno 'su questa riga al termine dell'elaborazione si ferma e mostra Errore
strBand2 = rsDxCB!Band
strDirettore2 = rsDxCB!Direttore
If (intAnno2 = intAnno1 + I) And (strBand2 = strBand1) And (strDirettore2 = strDirettore1) Then
GoTo A
Else
rsDxCB.MovePrevious
rsDP.AddNew
If rsDxCB!Anno = intAnno1 Then
rsDP!Periodo = intAnno1
Else
rsDP!Periodo = intAnno1 & " - " & rsDxCB!Anno
End If
rsDP!Band = rsDxCB!Band
rsDP!Direttore = rsDxCB!Direttore
rsDP.Update
End If
I = 0
rsDxCB.MoveNext
Loop
rsDP.Close
rsDxCB.Close
MyDB.Close
End Sub
riesco a mostrare la lista completa come desidero che sia (tranne vedi Domanda 2).
Domande:
1) Piuttosto che usare una tabella appoggio, sarebbe meglio sfruttare una query con una o più Function di riferimento? Se sì...mi perdo nei limiti delle mie conoscenze: chiedo lumi.
2) Il codice che ho mostrato si ferma sulla riga che ho indicato, con Errore di run-time 3021, Nessun record corrente. Immagino che abbia terminato di scorrere il recordset, si trovi su RecordNuovo e non sa cosa fare. Il codice non considera l'ultimo record. Non riesco a migliorare questo aspetto.