Aiuto con gestione maschera-sottomaschere collegate

di il
9 risposte

Aiuto con gestione maschera-sottomaschere collegate

Buonasera a tutti,

qualche mese fa ho chiesto parecchi aiuti per la creazione di un database gestionale per un laboratorio di chimica. Con tutto questo casino purtroppo il database è rimasto fermo, ma oggi mi ritrovo a chiedervi aiuto per la gestione di maschere e sottomaschere collegate...

Qui sotto la foto dell'albero delle relazioni.
Albero_Relazioni_DB.png
Albero_Relazioni_DB.png

Provo a spiegare brevemente la mia idea:
Vorrei una maschera principale (legata alla tblProduttori) con una txtNomeProduttore e una cmbLocalità
In questa maschera una sottomaschera filtrata per IDProduttore (legata alla tblVigneti) con i campi visibili in foto allegata.
Sempre nella stessa maschera ancora una sottomaschera filtrata per IDProduttore e IDVigneto (legata alla tblSpecie) con ancora i campi visibili in foto allegata.

[Per ora talascio la parte degli sperimenti, si parla di un'altra maschera]

Per ora sono riuscito a fare ciò:
Alla selezione di un produttore la 1° sm viene filtrata facendo apparire solamente i vigneti di quel certo produttore
Alla selezione di un vigneto la 2° sm viene filtrata facendo apparire solamente le specie di quel certo vigneto

Qui la foto di come è strutturata tale maschera:
Maschera_GEstioneVigneti_DB.png
Maschera_GEstioneVigneti_DB.png



Spero di essere stato abbastanza chiaro, perchè ora ho bisogno di aiuto.
Sia nella maschera che in ciascuna sottomaschera sono presenti 3 buttons, uno per il NewRecord, uno per l'EditRecord, e uno per il DelRecord. Mi servirebbe un grandissimo aiuto con la gestione di essi. Ho gia predisposto delle maschere di dettaglio per l'edit/add di record.

Avendo solamente 16 anni mi sto cimentando in modo molto homemade a questa cosa, e un aiuto diretto da voi del forum sarebbe fondamentale.

Per ora sono riuscito a far funzionare i buttons della maschera principale relativa al produttore e della 1° sm relativa al vigneto. Di seguito il codice usato:
Per il cmdNuovo e cmdEdit il codice è simile, solamente ho modificato l'OpenArgs; mentre nelle sm ho reso invisibile la maschera intera, e non soltato la sm.
Private Sub cmdNuovo_Click()

    Me.Visible = False
    DoCmd.OpenForm "mProduttoriLkp", , , "IDProduttore = " & Me.IDProduttore, acFormAdd, acDialog, "New"
    Me.Visible = True
    Me.Requery
    

End Sub
Questo è il codice di quando si chiude la form di dettaglio:
Private Sub Form_Unload(Cancel As Integer)
    DoCmd.RunCommand acCmdSaveRecord
End Sub
Già qui vi chiedo cosa ne pensate. E' una gestione vagamente ottimale?

Per la 2° sottomaschera non rieco invece proprio a far funzionare questi bottoni...

Vi ringranzio moltissimo in anticipo, perchè mi rendo conto di chiedere tantissimo. Se qualcuno potrebbe aiutarmi e darmi qualche spunto gliene sarei davvero grato. Buona serata!

9 Risposte

  • Re: Aiuto con gestione maschera-sottomaschere collegate

    GabryBarbe ha scritto:


    Già qui vi chiedo cosa ne pensate. E' una gestione vagamente ottimale?

    Per la 2° sottomaschera non rieco invece proprio a far funzionare questi bottoni...
    Espongo la MIA opinione. Considerata la mole di dati, così come li hai mostrati, la gestione maschera/sottomaschera/sotto-sottomaschera è corretta. Finchè fai tutto con procedura guidata, se la vede Access e l'utente, se non deve andare al di là dello "standard", si limita a usare i comandi standard.
    Mentre maschera/sottomaschera si sincronizzano grazie al gioco delle proprietà "Collega campi secondari" e "Collega campi master", la sotto-sottomaschera dipende LOGICAMENTE da sottomaschera, ma FISICAMENTE risiede nella maschera. La sincronizzazione avviene grazie a un codice VBA che la procedura guidata innesca automaticamente.
    Per cambiare i giochi in tavola con personalizzazioni di comandi, devi conoscere bene come sta messo il tutto.
    Io da molto tempo non uso più la gestione su 3 livelli proprio perché non riesco poi a personalizzare cose che piacciono a me. Imparando a progettare...ci si accorge anche che mettere troppa carne su quel "piccolo" quadrante di monitor, ci si "incasina" facilmente.
    Il mio spassionatissimo consiglio è che quanto più puoi suddividere le operazioni in piccoli steps (che sia input, visualizzazione, filtrazione, ecc...) in più maschere (magari collegate), tanto meglio è.
    Forse sono andato fuori tema...non so se ho reso l'idea.
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Ciao Osvlado,

    grazie mille dei consigli, naturalmente molto utili.
    Sinceramente ho fatto il tutto, forse erroneamente, senza procedura guidata. Proprio per questo chiedo se secondo voi la gestione è corretta o meno.

    Ho pensato a come poter organizzare questo database, e la soluzione più intuitiva per gli utilizzatori finali, e per lo scopo che questo db deve avere, è questa.
    Se tuttavia la gestione diventa troppo complicata si può cercare di modificare la struttura maschere e dividerle. Ma se riuscissimo a tenere questa struttura ve ne sarei grato.
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Per me hai molte tabelle "a catena" e gli utenti potrebbero chiedere di vedere/usufruire dei dati da molti punti di vista. Il database è "relativamente" complesso di suo. Le problematiche le affronti e risolvi anche strada facendo. Hai 16 anni? Quanti errori hai da fare ancora, tanti database da smontare e rifare!
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Buongiorno,

    mantenendo la gestione a 3 ho effettuato questa modifica: con doppioclick sul nome di produttore/vigneto/SB si entra nella form di dettaglio per la modifica di quel record. E per adesso mi pare che la gestione degli edit è sistemata. Per i bookmark penso di fare un thread a parte.

    Ora il problema sono i pulsanti per creare dei nuovi record..
    Nella seconda sottomaschera, quella delle SB, non riesco a creare un nuovo record se non ce n'è almeno uno già creato. Mi spiego meglio. Se riferito al vigneto A ho già almeno 1 specie registrata, il pulsante funziona correttamente. Se riferito al vigneto A non ci sono delle SB già registrate allora non mi a creare il nuovo record.

    Il codice che ho utilizzato è i seguente:
    Forms!mproduttori.Visible = False
    DoCmd.OpenForm "mSpecieLkp", , , "IDVigneto = " & Me.IDVigneto, acFormAdd, acDialog, "New"
    Forms!mproduttori.Visible = True
    Me.Requery
    Come spiegato prima, il codice è quello perchè uso la proprietà Unload nella maschera di dettaglio.

    Tuttavia, quando provo a creare un primo record l'errore che mi esce è questo: errore di run-time 3075
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Dalla struttura tabelle vedo apparire 2 volte Vigneti. Poi la tabella Specie riporta un IDProduttore inutile perché già ereditato da Vigneti. Non vorrei sia questo che ti dà rogne.
    Quando in una casella combinata non hai un valore, devi aggiungerlo nella tabella madre superiore. Si sfrutta l'evento "Non in elenco" (NotInList) con conseguente Requery.
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Ciao, come da consiglio ho eliminato quel IDProduttore in eccesso.

    Sapresti aiutarmi con l'evento NotInList?
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Ci sono molti modi di gestire il NotInList. Io ne ho personalizzato uno a modo mio. Leggi questo documento
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    Ho guardato un po', ma non riesco ad applicarlo al mio caso. Forse non sono riuscito a far capire bene la mia idea.

    Con il click del pulsante "Nuovo" nella 2° sottomaschera dovrebbe aprirmi una form di dettaglio per la compilazione, ma questo non avviene... come fare?
  • Re: Aiuto con gestione maschera-sottomaschere collegate

    EDIT:

    dopo averci smanettato un po' sopra sono riuscito a far funzionare tutto, trovando e correggendo un po' di codice. grazie mille per l'aiuto.

    Ora però arriva un altro problema...
    Quando apro la form di dettaglio per l'edit del produttore (dunque maschera principale) vorrei che alla chiusura della seguente maschera di dettaglio con apposito pulsante, la form principale torni visibile e posizionata su quel record.
    Idem con la creazione di un nuovo record: vorrei che quando torno sulla maschera principale mi si posizione direttamente sul nuovo record.

    Ho pensato di sfruttare gli argomenti, ma forse è la strada sbagliata. Forse bisogna sfruttare i bookmark? ho provato a guardarci un po', leggendo anche la guida e tutto quanto, ma non riesco ad apprenderne al 100/100 il funzionamento.
    Sapreste darmi qualche dritta?
Devi accedere o registrarti per scrivere nel forum
9 risposte