Newsgroup: it.comp.appl.access
Titolo: Inserimento dati con relazione molti a molti

Buongiorno,
in un DB ho due tabelle collegate tra loro. La prima tabella è un'anagrafica (TabPersonale), con un campo PerID come chiave primaria; la seconda è una tabella che contiene varie attività che si possono assegnare al personale (TabAttivita), contenente due campi: AttID e AttDefinizione. In una terza tabella le collego in relazione molti-a-molti. Ad ogni dipendente possono essere assegnate più attività ed ogni attività può essere assegnata a più dipendenti.
Ora, il problema è come implementare tale tabella; con maschera e sottomaschera le ho unite, però questo obbliga l'utente a scorrere tutti i dipendenti (circa 2.000) uno alla volta e ad ognuno effettuare l'assegnazione, lo stesso dicasi per le eventuali modifiche.
Mi è stato chiesto, per velocizzare tale operazione, di creare una maschera con l'elenco dei dipendenti ed una serie di caselle di controllo (check) una per attività, da spuntare o meno. Sicuramente tale soluzione agevolerebbe di molto il lavoro. Se i dati delle attività fossero statici potrei pensare di unire le due tabelle in una, inserendo un campo Sì/No per ogni attività, purtroppo le Attività possono variare nel tempo (aumentare e/o diminuire), per cui dovrei ad ogni modifica andare a modificare la tabella e la maschera di inserimento.
A questo punto sono fermo; ho pensato ad una tabella di appoggio da creare ad ogni apertura, ma così perderei i dati presenti.
Esiste un modo per modificare dinamicamente la maschera di inserimento dati con le check box?
Uso Access 2013 su Windows 10.
Grazie
Franco

franco...@gmail.com
 expressed precisely :

Una tabella di appoggio... secondo me ne hai già creata
una di troppo con quella molti-a-molti che ha la stessa
utilità, forse meno, di quelle uno-a-uno.
 
Con la TabPersonale opportunamente relazionata molti-a-uno
con la TabAttività hai già tutto quel che ti serve per creare
Form Personale e subForm Attività.
Sulla prima poni una combo dalla quale puoi scegliere il
dipendente che apparirà nella sub form.
 
Se poi crei Form e subForm nella modalità ContinuosForm, ti
risparmi la combo perché selezionando  sulla prima un
dipendente, sulla seconda appariranno le attività
ad esso correlate.
 
Bruno

Bruno Campanini scrive:
Una tabella di appoggio... secondo me ne hai già creata
una di troppo con quella molti-a-molti che ha la stessa
utilità, forse meno, di quelle uno-a-uno.
 
Questa "Tesi" che hai condiviso con tutti è assoluta o relativa al contesto...?
 
Se hai elenco Mansioni(catalogo) ed un Elenco Anagrafiche... ed ogni Anagrafica può assolvere Molte Mansioni, di conseguenza ogni mansione può essere assegnata a Molte Anagrafiche, ... credo che la "Tua Tesi" abbia bisogno di qualche apporto tecnico decisamente piu esaustivo.
 
Le relazioni M-M sono parte fondamentale della 3FN... ma magari io ho un libro diverso... vecchio.
 
@Alex

Personalmente una situazione simile ho preferito gestirla con 3 Listbox.
 
A Sx la ListBox Anagrafiche(selezione singola)
A Dx la Listbox Mansioni(selezione multipla estesa)
Al Centro Listbox MansioniAnageafica(selezione mulipla Estesa)
 
Poi ho gestito tutto come nelle Autocomposizioni...
Seleziono Anagrafica e visualizzo quali mansioni sono assegnate... inizialmente nessuna...
Poi selezioni a dx le mansioni e le trasferisco all'amagrafica con una query insert.
Contemporaneamente la List Mansioni ha un NOT IN SELECT per non visualizzare le mansioni gia assegnate all'anagrafica.
 
Sono poche righe di codoce se ti è chiara la logica...
 
@Alex

Grazie ad entrambi per l'interessamento.
Non sono d'accordo con Bruno in quanto la relazione molti-a-molti è necessaria per collegare le due tabelle.
La soluzione di Alex invece l'ho già adottata ed effettivamente aiuta di molto l'inserimento.
Temo che purtroppo non sia fattibile l'utilizzo di una maschera con i vari check, molto comoda ma irrealizzabile.
Saluti
Franco

franco...@gmail.com
 presented the following explanation :

Oggi mi sento molto vox clamans in deserto...
 
https://1drv.ms/u/s!AvTaMfd5-b2oxRRHFjbeMuSX2QAh?e=ctqYbO
 
 
Prova a dare un'occhiata al file in indirizzo.
Tre tabelle, due Form, nemmeno una riga di codice.
Si compila manualmente la tabella Attività poi tutto
il resto dalla Form Personale (modifica e inserimento
personale, collegamento Personale-Attività).
 
Vi sono già alcuni dati inseriti (P1 P2 P3... Personale,
A1 A2 A3... Attività).
 
Bruno


Sarebbe realizzabile, anche e soprattutto senza Tabella TEMP, personalmente EVITO le Tabelle TEMPORANEE se posso... a favore di un più flessibile metodo equivalente in MEMORIA.
 
In ogni caso quello che ti sto per esporre lo trovo poco pratico, anche se molto flessibile.
 
Nella sostanza faccio uso di un RS ADO che consente di gestire RS non associati Temporanei in Memoria, nel concreto puoi crearti una TABELLA FITTIZIA usando il RS ADO che poi associa al RECORDSOURCE della Form, inclusi i ControlSource dei controlli.
 
Esempio crei una Maschera Continua, con 2 Controlli:
1° TextBox  [Mansione]  [ControlSource]="Mansione"
2° CheckBox [Selector]  [ControlSource]="Selector"
 
Su Load della Maschera scrivi:
 
Option Compare Database
Option Explicit
 
Private Rs                    As New ADODB.Recordset
 
Private Sub CREATABELLA()
    'Creo il campo Nomefile nel recordset
    Rs.Fields.Append "Mansione", adVarChar, 100
    Rs.Fields.Append "Selector", adBoolean, 100
    'Apro il recordset
    Rs.Open , , adOpenDynamic, adLockOptimistic
    ' Aggiungo un Record di TEst
    Rs.AddNew
    Rs.Fields("Mansione").Value = "Enologo"
    Rs.Fields("Selector").Value = false
    Rs.Update
    Set Me.Recordset = Rs
End Sub
 
Ovviamente è banale la cosa, ma se al posto del SINGOLO ADDNEW apri un RS sulla Tabella Mansioni e Popoli il RS(ADO) ottieni l'elenco SELEZIONABILE con i CheckBox... ovviamente poi su UNLOAD prima di cancellare il tutto devi recuperare le INFORMAZIONI ed usarle.
Per questo ci sono diversi metodi... ma vedi tu.
 
@Alex

 Bruno
 
Quella si chiama proprio RELAZIONE in 3FN , Molti-Molti. 
Sembri Salvini che non si sa se ritratta, o se non lo sapeva...
Mah... quel metodo è scomodo per le selezinoi massive... non lo userebbe nessuno se dovesse avere più Anagrafiche con varie Mansioni per Anagrafica... una palla.
 
Però... ognuno fa quello che può.
 
@Alex


Questo è quanto secondo me è la logica normale:
https://1drv.ms/f/s!ALe2sGzrs4WCgQA
 
 
Ovviamente è molto banalizzato.
 
@Alex

Grazie Alex,
ho presentato all'utente la soluzione con due list box ed è piaciuta, quindi per ora si tengono quella; tra l'altro è simile a quella chi mi hai permesso di scaricare.
Però è interessante anche la soluzione della tabella temporanea, che mi propongo di sperimentare.
Saluti
Franco

Ho buttato giù una cosa veloce con i 2 sistemi... uno lo hai già visto l'altro è con la Maschera associata ad un RS ADO(TEMP)... non associato.
 
https://1drv.ms/u/s!ALe2sGzrs4WChwM
 
 
Preferisco sempre le ListBox, con 1 sola Maschera si fa tutto.
Saluti
@Alex