Collegamento tra maschere su evento clic.

di il
14 risposte

Collegamento tra maschere su evento clic.

Salve a tutti sono pronto per una nuova strigliata! Ecco qual è il problema stavolta.

Ho una maschera “Lista Dipendenti”, la quale è divisa, ma in realtà vedo solo il foglio dati, in pratica è come se fosse una tabella. In questa maschera ho la lista dei dipendenti e i nomi dei campi sono:

IDDipendente    Cognome   Nome 

Inoltre ho un'altra maschera di nome “Dipendenti” in cui ho i dettagli di ogni dipendente, si apre come Popup. Ora io vorrei che quando sono nella maschera “Lista Dipendenti” l'ID corrispondente al relativo Dipendente fosse cliccabile e quando lo clicco si deve aprire la maschera “Dipendenti” esattamente a quel dipendente. La soluzione che più si avvicina a questo è la seguente:

Private Sub IDDipendente_Click()
DoCmd.OpenForm "Dipendenti", , , "[IDDipendente]= " & Nz([IDDipendente], 0)
End Sub

Questo fa quasi cioè che vorrei, nel senso che apre la maschera “Dipendenti” a quel dipendente, ma la maschera si presenta filtrata e dunque se poi voglio “navigare” nella maschera “Dipendenti” per vedere un altro dipendente devo togliere il filtro. 

Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

Vi ringrazio.

14 Risposte

  • Re: Collegamento tra maschere su evento clic.

    Private Sub IDDipendente_Click()
    DoCmd.OpenForm "Dipendenti", , , "[IDDipendente]= " & Me![IDDipendente]
    End Sub

    Questa è la forma più standard/corretta.

    28/05/2023 - Nat ha scritto:


    ma la maschera si presenta filtrata e dunque se poi voglio “navigare” nella maschera “Dipendenti” per vedere un altro dipendente devo togliere il filtro. 

    Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

    I campi di Lista Dipendenti e Dipendenti sono gli stessi in tabella? Oppure Dipendenti è una tabella figlia di Lista Dipendenti?

    Comunque sia…trovo illogico il comportamento che tu vuoi mettere in atto. L'uso del codice che hai proposto va bene. Il seguito…non capisco. Puoi spiegare le motivazioni?

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - OsvaldoLaviosa ha scritto:


    Private Sub IDDipendente_Click()
    DoCmd.OpenForm "Dipendenti", , , "[IDDipendente]= " & Me![IDDipendente]
    End Sub

    Questa è la forma più standard/corretta.

    28/05/2023 - Nat ha scritto:


    ma la maschera si presenta filtrata e dunque se poi voglio “navigare” nella maschera “Dipendenti” per vedere un altro dipendente devo togliere il filtro. 

    Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

    I campi di Lista Dipendenti e Dipendenti sono gli stessi in tabella? Oppure Dipendenti è una tabella figlia di Lista Dipendenti?

    Comunque sia…trovo illogico il comportamento che tu vuoi mettere in atto. L'uso del codice che hai proposto va bene. Il seguito…non capisco. Puoi spiegare le motivazioni?

    Grazie ma in questo modo la maschera “Dipendenti” risultata nuovamente filtrata. Allora le due maschere provengono dalla stessa tabella. Nella “Lista Dipendenti” ho tolto alcuni campi, si vede il nome, il cognome, l'ID, la mail, invece nella maschera “Dipendenti” non solo ci sono gli stessi campi e la foto, ma ci sono altre pagine come le ore di lavoro, le visite mediche i corsi di formazione per quel determinato dipendente, ecco perché preferisco fare in questo modo. “Lista Dipendenti” è una cosa veloce per poi andare nei dettagli dei dipendenti. Però anche con il tuo suggerimento quando clicco sull' ID mi si apre la maschera “Dipendenti” filtrata, siccome poi nella maschera “Dipendenti” ho messo una casella combinata che mi permette di scegliere il dipendente in quella maschera, una sorta di “Vai a”, se io non tolgo il filtro questo “vai a” non funziona. Ecco perché vorrei che la maschera si aprisse a quel dipendente senza essere filtrata. Tipo se la maschera è fatta da 20 record apre tutta la maschera ma al record di quel dipendete. 

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - Nat ha scritto:


    Nella “Lista Dipendenti” ho tolto alcuni campi, si vede il nome, il cognome, l'ID, la mail, invece nella maschera “Dipendenti” non solo ci sono gli stessi campi e la foto, ma ci sono altre pagine come le ore di lavoro, le visite mediche i corsi di formazione per quel determinato dipendente

    Questo è errato progettualmente (errata NORMALIZZAZIONE). Puoi elencare esattamente tutti i campi di entrambe le tabelle?

  • Re: Collegamento tra maschere su evento clic.

    Sinceramente non riesco a seguire il ragionamento logico che c'è alla base.

    Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

    In questa frase io interpreto il tutto contrario di tutto. Dici che si deve aprire esattamente a quel dipendente, ma non la vuoi filtrata, ma deve aprirsi filtrata su quel dipendente.
    Per chiarire. Usi delle maschere continue?
    Vuoi che la maschera si posizioni sul record del dipendente ma che tutti gli altri siano disponibili?

    Se crei una lista semplificata dei dipendenti è per avere a colpo d'occhio, solo gli elementi che ti occorrono per trovare un determinato dipendente, così da accedere immediatamente alla sua scheda dettagliata senza dover scorrere decine di dipendenti.

    Trovo inutile avere una lista semplificata, per aprire un altra lista con tutti i dipendenti e non quello specifico.

    Quindi il ragionamento “lista semplificata ”  -?  “Dettagli dipendenti”, la trovo giusta.
    Se poi dai dettagli di un dipendente vuoi avere anche la lista di tutti i dipendenti, basta che sulla maschera filtrata dei dettagli, metti un pulsante dove annulli il filtro.

    Comunque il wizard di access permette di creare maschere collegate che semplificano di molto la loro creazione.

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - OsvaldoLaviosa ha scritto:


    28/05/2023 - Nat ha scritto:


    Nella “Lista Dipendenti” ho tolto alcuni campi, si vede il nome, il cognome, l'ID, la mail, invece nella maschera “Dipendenti” non solo ci sono gli stessi campi e la foto, ma ci sono altre pagine come le ore di lavoro, le visite mediche i corsi di formazione per quel determinato dipendente

    Questo è errato progettualmente (errata NORMALIZZAZIONE). Puoi elencare esattamente tutti i campi di entrambe le tabelle?

    Allora nelle “Lista Dipendenti” sono prensenti i seguenti campi: IDDipendente, Cognome, Nome, società, mail, qualifica, cellulare, indirizzo. La maschera “Dipendenti” contiene tutti questi in aggiunta della foto e di una casella di controllo assunto(Sì/no)e poi ci sono le relative pagine che riguardano le ore, le visite mediche e i corsi di formazione.

  • Re: Collegamento tra maschere su evento clic.

    Maschera Lista dipendenti

    E maschera Dipendenti

  • Re: Collegamento tra maschere su evento clic.

    Comunque facendo un ragionamento veloce, uno dei metodi possibile, ma forse il meno ottimale, devi aprire la maschera con una query in cui vai a richiamare tutti i dati, ed imposti al caricamento un filtro, con il quale visualizzi solo il dipendente interessato. Se poi vuoi navigare anche negli altri dipendenti, metti un pulsante con il quale vai a togliere il filtro ed in teoria, avendo come fonti dati una query che ha già recuperato tutti i dipendenti, vengono resi disponibili per la navigazione ed eventuali modifiche.

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - fratac ha scritto:


    Sinceramente non riesco a seguire il ragionamento logico che c'è alla base.

    Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

    In questa frase io interpreto il tutto contrario di tutto. Dici che si deve aprire esattamente a quel dipendente, ma non la vuoi filtrata, ma deve aprirsi filtrata su quel dipendente.
    Per chiarire. Usi delle maschere continue?
    Vuoi che la maschera si posizioni sul record del dipendente ma che tutti gli altri siano disponibili?

    Se crei una lista semplificata dei dipendenti è per avere a colpo d'occhio, solo gli elementi che ti occorrono per trovare un determinato dipendente, così da accedere immediatamente alla sua scheda dettagliata senza dover scorrere decine di dipendenti.

    Trovo inutile avere una lista semplificata, per aprire un altra lista con tutti i dipendenti e non quello specifico.

    Quindi il ragionamento “lista semplificata ”  -?  “Dettagli dipendenti”, la trovo giusta.
    Se poi dai dettagli di un dipendente vuoi avere anche la lista di tutti i dipendenti, basta che sulla maschera filtrata dei dettagli, metti un pulsante dove annulli il filtro.

    Comunque il wizard di access permette di creare maschere collegate che semplificano di molto la loro creazione.

    “Vuoi che la maschera si posizioni sul record del dipendente ma che tutti gli altri siano disponibili?” Giusto!

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - Nat ha scritto:


    “Vuoi che la maschera si posizioni sul record del dipendente ma che tutti gli altri siano disponibili?” Giusto!

    ho fatto una prova con un mio database proprio in questo momento.

    creando un pulsante ed usando una banale

    Private Sub Comando90_Click()
    Me.FilterOn = False
    
    End Sub

    praticamente togli il filtro.

    Ora bisogna vedere che cosa hai usato per filtrare il tutto.

    Da quello che vedo hai usato le maschere presenti in access in “crea parti di applicazione” e se non vado errato usano le mascro e non il vba, ma il concetto è lo stesso. 
    Dalla maschera filtrata, togli il filtro tramite una macro collegata ad un pulsante o ad una pseudo voce di menu (termine che ho inventato, con il quale chiamo i pulsanti “Salva ed aggiungi", “Vai a” " ) ed avrai tutta la lista dei dipendenti.

    Altre soluzioni implicano una conoscenza approfondita di access e di vba.

  • Re: Collegamento tra maschere su evento clic.

    Chiedo scusa per il mio durissimo senso di comprensione. Riepilogo tutto a parole mie.

    Tua hai UNA tabella Dipendenti. Su di essa hai costruito 2 maschere Lista Dipendenti (visualizzazione foglio dati) e Dipendenti (visualizzazione maschera singola). Su quest'ultima poi hai costruito varie pagine di altri dettagli.

    Io trovo corretta la progettazione della maschera Dipendenti con le relative pagine di dettaglio. A cosa ti serve la maschera Lista Dipendenti? Perchè hai pensato a tutto quel ragionamento (non)logico di partire da Lista Dipendenti, poi…ecc…?

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - OsvaldoLaviosa ha scritto:


    A cosa ti serve la maschera Lista Dipendenti? Perchè hai pensato a tutto quel ragionamento (non)logico di partire da Lista Dipendenti, poi…ecc…?

    Forse la usa come una specie di ricerca ordinata in ordine alfabetico invece di usare una listbox o una combobox.

    L'approccio non è del tutto ortodosso, ma per una persona che si è avvicinata da poco ad access, che usa le wizard per costruire le maschere ed usa “le parti di applicazione ” di access, ha un suo senso logico.

    Concordo che non è il modo più ottimale per affrontare il problema, ma ha una sua logica.

    Inoltre rendendo cliccabili tutti i campi della lista, potrebbe essere un modo veloce per aprire esclusivamente i dati che bisogna visualizzare o modificare senza aprire l'intera scheda del dipendente.

    Io almeno l'ho interpretata in questo modo.

  • Re: Collegamento tra maschere su evento clic.

    Io userei un sistema come questo,(tralasciando che la maschera fa schifo) ma implica una conoscenza di access diversa rispetto a quella che presumo possieda l'autore del post.
    La list box, permette una navigazione su tutti i membri.
    Selezionando il membro, si ha una panoramica sulla propria scheda e con i relativi pulsanti si vanno a vedere , aggiungere o modificare tutte le attività.
    Ed è un approccio logico universale che permette di gestire qualsiasi cosa. Dagli articoli di magazzino di qualsiasi tipologia, alla gestione di una rubrica telefonica, alla gestione dei dipendenti.
    Una singola maschera, dove hai tutto a disposizione, con un paio di controlli, qualche pulsante e semplici query di selezione ed un paio di righe di codice per gestire  gli eventi.

  • Re: Collegamento tra maschere su evento clic.

    28/05/2023 - Nat ha scritto:


    Come si può fare in modo che la maschera si apra con tutti i suoi elementi, ma esattamente a quel dipendente? Cioè non vorrei che la maschera Dipendenti si presentasse filtrata, ma si presentasse aperta a quel dipendete, in modo tale che possa andare avanti e indietro nella maschera senza togliere alcun filtro!

    Come gli altri che sono già intervenuti, trovo illogico tale approccio.

    Un conto se voglio utilizzare una successiva form da aprire per la consultazione di tutti gli altri dati (e va bene, è una estensione di talune informazioni di dettaglio)

    Altro conto se voglio quanto appena detto sopra e in più navigare anche su tutti gli altri records. (qui mi sfugge la logica di tale desiderio)


    Quando Office, in anni antichi, cercò di avvicinarsi alla programmazione ad oggetti, dava finalmente l'opportunità di progettare in un certo modo. 
    Un approccio molto più semplificato e, da tenerne in conto per ogni fase del progetto, dove ogni "cosa" ha il suo posto, la sua funzionalità e finalità.

    A tal proposito il consiglio che posso darti è quello di:

    • creare Sub / Function parametrizzate e che possano vivere e convivere con qualsiasi altro blocco di codice e/o oggetto
      • mai creare più routine che fanno più o meno le stesse cose e che restituisco più o meno lo medesimo risultato
        • ne basta una scritta bene per essere sempre utilizzata evitando inutili ridondanze di codice 
    • creare Oggetti parametrizzati che abbiamo vita a se e che possono essere richiamate e/o inglobate in un flusso qualsiasi del progetto
      • Form
      • Report
      • Query
      • Etc…
        • Per esempio una Form o un Report parametrizzati a dovere, potrà essere utilizzata in vari scenari e/o flusso del progetto e mai ridondare lo stesso oggetto solo perchè viene richiamato in modi diversi o in un altro punto del progetto. 

    Il fine sarà quello di avere tanti oggetti da poter assemblare insieme ad altri oggetti, farli comunicare per ottenere i risultati voluti secondo i vari scenari. 

    Insomma, semplificare, ottimizzare e applicare la “Logica”, per meglio definire un flusso corretto e agevole all'interno del progetto.


    Nello specifico del tuo quesito:
    Realizza una Form con le informazioni di Dettaglio come hai illustrato. Questa avrà vita propria, cioè non dipenderà mai da cosa o da chi la richiama per poter essere aperta.
    Imposta in essa criteri di ricerca e di ordinamenti da poter Selezionare a proprio piacimento per esplorare il suo contenuto.
    Imposta in essa possibili valori di Ritorno , per esempio un Id chiave da sfruttare da parte di una form chiamante e/o altro…
    Imposta per essa parametri di come potrà essere utilizzata. Per esempio solo in lettura, oppure in Edit (immissione/aggiornamento), etc…

    Insomma… crea un oggetto Form valida per tutte le stagioni, flessibile, implementabile e da utilizzare in qualsiasi contesto, ma che non dipenda da altri oggetti.

    Insomma… solo un piccolo e modesto consiglio per semplificarti la vita. E lavorare sempre con un flusso logico di eventi.

  • Re: Collegamento tra maschere su evento clic.

    Grazie a tutti!

Devi accedere o registrarti per scrivere nel forum
14 risposte