Gestione dialogo tra più livelli di maschere

di il
8 risposte

Gestione dialogo tra più livelli di maschere

Nella costruzione del database della musica, mi trovo a dover gestire il dialogo fra diversi livelli di maschere, per cui pubblico lo schema di dialogo tra le varie maschere dove:




1) Le maschere segnate da un rettangolo a sfondo blu, sono quelle legate al percorso principale di inserimento dati relativi all’album e sono
legate a tabelle con relazioni 1 a molti
2) Le maschere segnate da un rettangolo a sfondo giallo sono le maschere incorporate come sottomaschere all’interno di una specifica maschera
di inserimento dati
3) Le maschere segnate da un rettangolo a sfondo verde sono le maschere richiamate da più livelli delle maschere di inserimento dati album
4) Le maschere segnate da un rettangolo a sfondo rosso sono le maschere che inseriscono dati su tabelle esterne e che sono richiamate da eventi “NOT IN LIST” dalle altre maschere
5) Le frecce di colore blu indicano che la chiamata tramite le due maschere connesse avviene tramite un pulsante di comando


Il rapporto tra i vari livelli di inserimento dati è:

L’Album (come elemento di Discografia) ha:
a. Almeno 2 immagini correlate [richiamo inserimento immagini]
b. Una o più edizioni [richiamo inserimento edizioni album]
c. Una formazione che lo ha eseguito [richiamo inserimento formazione]
d. Uno staff tecnico che lo ha prodotto [richiamo inserimento staff tecnico]

Ogni edizione:
a. Ha un elenco che definisce le quantità per ogni singolo tipo di disco o di oggetto contenuto [inserimento dati nella sottomaschera contenuto]
b. Ha uno o più dischi che ne fanno parte [richiamo inserimento Dischi]
c. Può avere uno o più oggetti che ne fanno parte [richiamo inserimento Oggetti (possibile solo se nell’elenco della sottomaschera contenuto sono presenti elementi di tipo “Oggetto”)]
d. Può avere una o più immagini che differiscono dalle immagini dell’album
e. Può avere una formazione diversa dalla formazione dell’album
f. Può avere uno staff tecnico diverso dallo staff tecnico dell’album

Ogni Disco
a. Ha una propria scaletta [sottomaschera scaletta disco]
b. Può avere Immagini diverse dall’edizione [richiamo inserimento immagini]
c. Può avere una propria formazione [richiamo inserimento formazione]
d. Può avere un proprio staff Tecnico [richiamo inserimento staff tecnico]

Ogni elemento della scaletta
a. Può avere propri dettagli [richiamo dettagli canzone]
b. Può avere una propria formazione [richiamo inserimento formazione]
c. Può avere un elenco di autori delle musiche e dei testi [richiamo inserimento autori musiche/testi]

Il funzionamento che mi serve creare è il seguente

1) Ogni maschera aperta tramite evento NOT IN LIST deve poter inserire un solo record, ovvero quello il cui nuovo dato è stato inserito nella combo box della maschera chiamante, dopo di che deve ritornare alla maschera chiamante posizionandosi sul controllo successivo della maschera chiamante rispetto a quello che ha scatenato l’evento NOT IN LIST

2) La maschera “Dettaglio Canzoni”, una volta richiamata, deve poter inserire un solo record, relativo al record che si sta inserendo sulla sottomaschera “Scaletta Disco” della maschera “Disco” e poi ritornarci posizionandosi sul controllo successivo della sottomaschera

3) Ogni volta che una maschera di livello più basso chiama un’altra maschera di livello più alto tramite un pulsante di comando:
a. Se è la prima volta che la maschera chiamante chiama un’altra maschera, la maschera chiamante deve consolidare i dati all’interno del database
b. La maschera chiamata deve essere in grado di inserire più record per ogni chiamata che riceve

4) Ogni volta che una maschera di livello più alto ritorna ad una maschera di livello più basso deve:
a. Consolidare nel database i dati del record di cui si stavano inserendo i dati nel momento in cui si è attivato il ritorno alla maschera di livello più basso
b. posizionarsi sullo stesso record su cui si trovava la maschera di livello più basso e, in particolare, sul controllo successivo a quello che è stato premuto che scatenare la chiamata originale alla maschera di livello più alto.

Inoltre, per quanto riguarda gli inserimenti dei dati:

Dati come livelli di inserimento:
Livello 00: Album
Livello 01: Edizioni Album
Livello 02: Contenuto(02a); Dischi(02b); Oggetti(02c)
Livello 03: Elementi di Scaletta
Livello 04: Dettaglio Canzone; Autori Musiche / Testi
Livello 10: Formazione; Immagini; Staff Tecnico

1) Il livello 00 deve poter sempre essere inserito, indipendentemente dalla presenza di record di livelli più alti correlati presenti

2) Il livello 01 deve poter essere inserito solo se esiste un record di livello 00 correlato, ma indipendentemente dalla presenza o meno di record di livello più alto correlati

3) Il livello 02 deve poter essere inserito solo se esistono sia il record di livello 00, che il record di livello 01 tenendo presente che:
a. I livelli 02a e 02b devono poter essere inseriti per qualunque record di livello 01 esistente
b. Il livello 02c deve poter essere inserito, solo se esiste almeno un record di livello 02a che contenga dati relativi ad elementi di tipo “oggetto”

4) Il livello 03 deve poter essere inserito solo se esistono record correlati di livello 00, 01 e 02b

5) Il livello 04 deve poter essere inserito solo se esistono record correlati di livello 00, 01, 02a, 02b 03

6) Il livello 10 deve poter essere inserito solo se esiste almeno un record correlato tra i record di livello 00, 01, 02b e 03

7) In tutti i casi l'inserimento di un determinato livello dati non deve dipendere dalla presenza di record correlati a lui di dati di livello più alto

Vista questa logica, nel database esistono maschere di elenco per Album, Edizioni Album, Dischi, Oggetti e Elementi Scaletta, in modo da far sì che, se durante l’inserimento di record di un determinato livello, non sono stati inseriti tutti i record correlati dei livelli più alti, posizionandosi su un record di una delle maschere elenco e dando un comando di “Modifica Dati”, si può aprire la maschera di inserimento dati relativa alla maschera elenco che si era attivata e riprendere l’immissione dati da dove la si era lasciata.

A questo punto le mie domande sulla gestione delle maschere sono le seguenti:

1) Quando sto inserendo i dati in una maschera di inserimento, qual è il momento in cui access consolida automaticamente i dati del record che sto modificando nel database?

2) Nella mia struttura, se non chiudo mai alcuna maschera, rischio di trovarmi aperte 7 od 8 maschere in contemporanea, mentre vorrei cercare di averne effettivamente visibili un massimo di 2. Per raggiungere questo obiettivo è meglio gestire il fatto tenendo comunque tutte le maschere aperte e rendendo visibili solo quelle che sono effettivamente al lavoro, oppure lasciare aperte solo le maschere su cui sto lavorando in quel momento? [esempio di questa seconda alternativa sono in "Maschera Album", ho inserito i dati relativi e seleziono il comando "Inserisci Edizione", si apre la maschera "Edizioni Album" dopo di che, nell'inserire un dato dell'edizione, scateno un evento not in list (per esempio sul tipo parametro) per cui si va a chiudere momentaneamente la "maschera Album" e si apre la "maschera Parametro"] Il mio dubbio in questo caso è: che conseguenze ha la chiusura di una maschera sui dati che sono stati inseriti all'interno della medesima? Poi che parametro si usa per rendere visibile o invisibile un'intera maschera?

3) Nell'inserimento dati relativi ad un album, esistono diverse situazioni in cui si passa da una maschera ad un'altra per poi tornare alla maschera chiamante [Esempio sono nella maschera "Edizioni Album", attivo la funzione "Inserisci Immagini" e, siccome è la prima volta che richiamo una maschera di livello più alto, ho bisogno del consolidamento del record di edizione che stavo inserendo nel database. Inserisco le immagini dopodiché ritorno alla maschera "Edizioni Album", da cui attivo il comando "Inserisci Disco" che richiama la maschera "Dischi" per poi, una volta inseriti tutti i dischi, tornare alla maschera "Edizioni Album"] A questo punto la domanda è: la maschera "Edizioni Album" ha mantenuto la possibilità, una volta superato l'ultimo controllo presente su di essa, di passare all'inserimento del record successivo?

4) È possibile dire ad una maschera (in questo caso l'idea era su quelle maschere che venivano aperte dallo scatenarsi di un evento NOT IN LIST) di salvare automaticamente i dati nel database una volta superato l'ultimo controllo presente sulla maschera e poi, invece di passare alla schermata di inserimento del record successivo, di chiudere la maschera e tornare a lavorare sulla maschera che ha scatenato l'evento NOT IN LIST in questione? Se sì, come?

Grazie per l'attenzione e buona giornata.

8 Risposte

  • Re: Gestione dialogo tra più livelli di maschere

    Un thread = una domanda (o almeno qualcosa di abbastanza definito e circoscritto)
  • Re: Gestione dialogo tra più livelli di maschere

    Philcattivocarattere ha scritto:


    Un thread = una domanda (o almeno qualcosa di abbastanza definito e circoscritto)
    La prima volta che ho creato un thread sul forum, ho fatto una domanda circoscritta e definita su un aspetto tecnico del codice VBA di access, al che la risposta è stata "che serviva capire come io avessi progettato il database per dare la risposta".

    Ho quindi postato l'analisi che avevo fatto e da lì è nata la discussione che mi ha fatto riprogettare il tutto da capo.

    Per questo, quando ho avuto altre domande (come in questo caso) ho subito messo la descrizione sia del problema che avevo, sia l'analisi di ciò che volevo ottenere come funzionamento, per poi fare le domande su cui mi serviva la risposta.

    In questo caso le domande sono le 4 messe alla fine del post ed è a quelle che mi serve risposta, il resto del post è solo per far capire la situazione che ho creato ed il funzionamento che vorrei poter avere.

    Se poi, così facendo, ho violato delle regole, me ne scuso.
  • Re: Gestione dialogo tra più livelli di maschere

    La sintesi è un dono rarissimo...
    Punto 11 del regolamento che serve leggere non scusarsi.
    1 Domanda per ogni 3d.
  • Re: Gestione dialogo tra più livelli di maschere

    @Alex ha scritto:


    La sintesi è un dono rarissimo...
    Punto 11 del regolamento che serve leggere non scusarsi.
    1 Domanda per ogni 3d.
    Sono andato a rivedermi il regolamento e il punto 11 dice testualmente

    "Una discussione per argomento. Una discussione deve trattare un solo argomento, non è consentito trattare più argomenti differenti nella stessa discussione."

    Ora il punto è che le domande che ho fatto (dal mio punto di vista) sono una serie di domande riguardanti un unico argomento, ovvero (come espresso nel titolo) la gestione del dialogo tra più livelli di maschere.

    Detto questo, chiudo la questione relativa al regolamento del forum e chiedo che soluzione devo adottare per poter avere risposta alle domande che ho fatto.

    1) cancello il thread (o chiedo che sia cancellato) e lo ripropongo separato creando un thread per ogni domanda?
    2) modifico il thread in modo che contenga una sola domanda e creo altri altri tre threads per le altre tre domande?

    In entrambi i casi serve che sia lasciata l'analisi introduttiva, oppure la devo cancellare?
  • Re: Gestione dialogo tra più livelli di maschere

    Per me usi un linguaggio descrittivo "tutto tuo"...e si fa molta fatica a cogliere il senso logico dell'intero organigramma. Se ti serve sapere/capire come gestire in più modi il NotInList, prova a leggere questo documento

    Considera che, se una stessa MascheraX viene chiamata da molte maschere, ti conviene ottimizzare il tutto sfruttando l'argomento OpenArgs del DoCmd.OpenForm, poi sul Load di MascheraX gestisci una Select Case Me.OpenArgs...caso per caso.
  • Re: Gestione dialogo tra più livelli di maschere

    Per quanto riguarda le maschere chiamate tramite il NOT IN LIST, ciò che mi serve sapere è come risolvere la seguente situazione:

    MascheraA
    Campo1
    Campo2
    ...
    CampoX
    Campo(X+1)
    ...
    CampoUltimo

    MascheraB
    Campo1
    Campo2
    ...
    CampoUltimo

    MascheraA.CampoX scatena un evento NOT IN LIST che richiama MascheraB

    a questo punto

    MascheraB.Campo1 è puntato su [recordnuovo] della tabella di riferimento con il codice ID = [ultimo presente in tabella]+1 .

    Normalmente, su evento MascheraB.CampoUltimo disattivato (o LostFocus), MascheraB si posiziona su MascheraB.Campo1 di [recordappenainserito+1]

    A me invece serve sapere se è possibile far sì che, su MascheraB.CampoUltimo LostFocus io possa
    1) Salvare i dati del record inserito tramite MascheraB
    2) Chiudere MascheraB
    3) Ritornare a MascheraA.Campo(X+1)

    Spero di essermi spiegato meglio
  • Re: Gestione dialogo tra più livelli di maschere

    Se leggi attentamente il documento che ti ho linkato, MascheraB (che sarebbe la MascheraSuperiore), ovviamente salva i PROPRI dati. Il pulsante Aggiorna provvede a dire a MascheraA "io record corrente di MascheraB imposto il mio valore ID in MascheraA e ne aggiorno anche il valore nella casella combinata grazie al Requery".
  • Re: Gestione dialogo tra più livelli di maschere

    OsvaldoLaviosa ha scritto:


    Se leggi attentamente il documento che ti ho linkato, MascheraB (che sarebbe la MascheraSuperiore), ovviamente salva i PROPRI dati. Il pulsante Aggiorna provvede a dire a MascheraA "io record corrente di MascheraB imposto il mio valore ID in MascheraA e ne aggiorno anche il valore nella casella combinata grazie al Requery".
    ok. Provvederò a studiare ed a provare la situazione

    Per il momento, grazie
Devi accedere o registrarti per scrivere nel forum
8 risposte