Macro ApriMaschera

di il
24 risposte

Macro ApriMaschera

Buongiorno a tutti. Sto' cercando di realizzare la seguente applicazione: ho creato una maschera (con sottomaschere) nella quale vengono visualizzati i risultati di una selezione su più tabelle del db.
Dopo la visualizzazione, avrei bisogno di aprire una nuova maschera, posizionandomi su uno dei campi valorizzati, e utilizzando il valore in esso visualizzato come filtro.
Ho provato ad associare la macro ApriMaschera alla funzione "Dopo aggiornamento" nella finestra Eventi delle Finestra delle proprietà del campo, ma non riesco a definire correttamente la "condizione WHERE" per la selezione dei record.
Suggerimenti?

24 Risposte

  • Re: Macro ApriMaschera

    La sintassi WHERE dipende da come/dove sono posizionati tutti i tuoi controlli all'interno di maschera/sottomaschera/sotto-sottomaschera. Dovresti descrivere tutto dettagliatamente usando i nomi propri delle maschere e dei campi che entrano in gioco.
  • Re: Macro ApriMaschera

    Buongiorno Osvaldo, provo a dettagliare:
    la maschera principale si chiama "UiU"
    la sottomaschera in cui vengono riportati i dati si chiama "Pers Fisica UiU Sottomaschera2"
    il campo di tale sottomaschera a cui associare la macro si chiama "cognome"
    l'evento relativo è "SU Invio" (N.B. penso sia più corretto rispetto all'iniziale "Dopo aggiornamento")
    la maschera che dovrebbe aprirsi all'esecuzione della macro è: "utenza_elettrico" (basata sulla tabella utenza_elettrico)
    il campo di "utenza_elettrico" su cui effettuare il filtro si chiama: "Cognome_utenza_elettrico"

    Praticamente vorrei che, al momento in cui mi posizione sul cognome dell'utente presente nella sottomaschera "Pers Fisica UiU Sottomaschera2", con il tasto Invio mi si apra la maschera "utenza_elettrico" con il solo record (o i record per eventuali omonimie) relativo all'utente selezionato.
    Spero sia il dettaglio che mi avevi chiesto.
    Grazie
  • Re: Macro ApriMaschera

    Ti stai avvicinando bene nella descrizione. Solo che non condivido di far lavorare WHERE sul campo Cognome. Immagino tu vorresti una filtrazione UNIVOCA. Se hai più persone Rossi Mario, Rossi Francesco, Rossi Paola, Rossi Sara, la WHERE ti filtrerà tutti questi Rossi che ho elencato.

    Tutto questo discorso perchè ci piace venire a capo dei meandri di Access. Se avessi progettato maschera/sottomaschera/sotto-sottomaschera con procedura guidata e avessi scelto che sotto-sottomaschera deve essere aperta con clic di pulsante (scelta Maschere collegate), Access avrebbe impostato i codici sottostanti correttamente. L'unica diversità sarebbe che la procedura guidata porta alla creazione di un pulsante, mentre tu vuoi associare lo stesso codice VBA all'evento "Su invio".
  • Re: Macro ApriMaschera

    Comprendo.. mi stai dicendo che devo rivedere tutta la progettazione della procedura? In realtà potrei impostare la WHERE sul campo CF, ma il mio problema è proprio stutturare tale clausola per la ApriMaschera!
  • Re: Macro ApriMaschera

    Non riprogettare tutto, continuiamo con ApriMaschera e WHERE associato. Il campo CF è ottimo in quanto univoco...ma dimenticavo ancora un particolare. WHERE va applicato esattamente al campo chiave di congiunzione fra sottomaschera e sotto-sottomaschera. Chiamerò per brevità:
    A = maschera principale
    B = sottomaschera
    C = sotto-sottomaschera
    IDB = il campo chiave primaria in B e corrispondente campo chiave esterna in C
    Devi considerare che Access dichiara il tuo campo IDB (dentro B) in questo modo:
    [Forms]![A]![B]![IDB]
    La sintassi da scrivere dentro la Condizione WHERE dovrebbere essere la seguente:

    [IDB]=[Forms]![A]![B]![IDB]

    [Forms] che molto probabilmente Access tradurrà nella struttura macro automaticamente in [Maschere] è una parola obbligatoria.
    Il campo [IDB] situato a sinistra dell'espressione indica il campo IDB che si trova nella maschera C in quanto tu stai facendo ApriMaschera C.
  • Re: Macro ApriMaschera

    Ecco la mia WHERE:
    [Maschere]![utenza_elettrico]![CF]=[Maschere]![UiU]![Pers Fisica UiU Sottomaschera2]![codice_fiscale]
    N.B. per allinearla il più possibile alla tua indicazione, ho anche provato la soluzione:
    [CF]=[Maschere]![UiU]![Pers Fisica UiU Sottomaschera2]![codice_fiscale]
    Sembra funzionare ma, legata all'Invio, la sottomaschera si apre appena arrivo sul record e non dopo averlo selezionato secondo necessità. Devo trovare un altro Evento utile.
  • Re: Macro ApriMaschera

    La seconda espressione è corretta.
    Mi devi assicurare che [codice fiscale]---->[CF] è la corretta relazione che unisce le rispettive tabelle sottostanti.

    omancino ha scritto:


    Sembra funzionare ma, legata all'Invio, la sottomaschera si apre appena arrivo sul record e non dopo averlo selezionato secondo necessità. Devo trovare un altro Evento utile.
    Può capitare spesso di impantanarsi con la scelta dell'evento giusto. Fai un po' di prove varie e vedi qual'è quello che più si addice alle tue aspettative. Capisci bene che il classico clic di pulsante è la soluzione più standard/intuitiva.
  • Re: Macro ApriMaschera

    Confermo la relazione. Sto' provando con l'evento "Su clic" per testarne la gestibilità (devo pensare a come rendere fruibile l'applicazione ai miei colleghi...).
    Incidentalmente, come possono "riazzerare" i campi della maschera principale quando chiudo la sottomaschera di consultazione, per poter effettuare una nuova query?
    Grazie.
  • Re: Macro ApriMaschera

    omancino ha scritto:


    "riazzerare" i campi della maschera principale
    Che cosa significa?
    Io ho capito che tu hai:
    - MascheraPrincipale (questa mostra i record uno alla volta)
    - SottoMaschera (visualizzazione Foglio dati)
    - SottoSottoMaschera che viene aperta grazie a un evento di tua scelta e che filtra grazie a WHERE
    Questo è un normale funzionamento dei 3 oggetti che ho elencato.

    omancino ha scritto:


    per poter effettuare una nuova query?
    Perchè parli di query?
    Il marchingegno che hai messo in piedi può svolgere molte funzioni: sia inserire, sia vedere...poi non capisco...
  • Re: Macro ApriMaschera

    Mi sono spiegato male..
    L'attuale schema è:
    La maschera principale contiene l'identificativo chiave del mio record, che io imposto manualmente per la ricerca.
    La sottomaschera contiene i dettagli del record ricercato (foglio dati)
    La sotto/sotto maschera mostra informazioni, derivanti da altra tabella (evento su click nel campo CF)
    Quando chiudo la sotto/sotto maschera, vorrei consentire all'utente di azzerare i campi della sottomaschera e della maschera e posizionarmi sul campo principale per una, eventuale, nuova ricerca.
    Considera che, al momento, si tratta di mera visualizzazione delle informazioni.
    E' troppo contorto?
  • Re: Macro ApriMaschera

    omancino ha scritto:


    La maschera principale contiene l'identificativo chiave del mio record, che io imposto manualmente per la ricerca.

    E' troppo contorto?
    Una MascheraPrincipale con un solo campo? Per me sì. Mi pare ne avevamo già parlato in un thread precedente. Secondo me tu fai un uso di MascheraPrincipale sprecato perchè potresti visualizzare tutti i dati della tabella madre e usare il tasto Trova oppure il Filtro in base a maschera (entrambi strumenti a portata di mano e progettati da Access).
    Provo a seguire il tuo filo logico, ma non mi dici se MascheraPrincipale poggia su una tabella (madre) oppure è libera/non associata. Solo in quest'ultimo caso ha senso parlare di "azzerare". Potresti predisporre una ulteriore macro con azione ImpostaValore = "" sul controllo di ricerca e associarlo all'evento "Su chiusura" di SottoMaschera...se non ho capito male.

    Vediamo se ho capito la tua logica.
    Tu preferisci avere questo marchingegno che avresti progettato SOLO PER LA RICERCA.
    Questo mi induce a pensare che tu usi altre MascheraPrincipale/SottoMaschera/SottoSottoMaschera SOLO PER INSERIRE. Tutto questo perchè vuoi separare le due operazioni che l'utente comune deve imparare a scindere in maniera categorica. È una linea di pensiero molto nobile...trovo un po' di spreco di risorse (maschere) inutile.
    Potresti usare MascheraPrincipale/SottoMaschera/SottoSottoMaschera sia per INSERIRE, sia per VEDERE. Se hai paura che le due operazioni vengano confuse dall'utente puoi sempre (sotto previa scelta) decidere di impostare le 3 maschere SOLO LETTURA oppure CONSENTI MODIFICHE.
  • Re: Macro ApriMaschera

    Grazie per il molto nobile...
    La maschera principale poggia su una tabella (UiU) il cui campo chiave è IdUiU: io inserisco tale codice numerico "a mano" nel primo campo della maschera principale.
    Nella sottomaschera vengo visualizzati alcuni campi di dettaglio presenti nella tabella anagrafica relativi all'utente associato al IdUiU.
    Con un click su campo CF di questa sottomaschera, apro la sotto/sotto maschera per dettagli su i dati dell'utenza elettrica dell'utente stesso.
    Fortunatamente, almeno per ora, le tabelle origini dei dati sono già presenti e devo solo consentirne la visualizzazione "incrociata".
  • Re: Macro ApriMaschera

    Osvaldo, che tu sappia, è possibile associare più ApriMaschera ad una sola azione?
  • Re: Macro ApriMaschera

    Vorresti dire Evento. Sì, certamente. A un clic di pulsante puoi associare tutte le azioni macro che vuoi, ad esempio:
    ApriMaschera A
    ApriMaschera B
    ApriMaschera C
    ImpostaValore
    VaiARecord
    ApplicaFiltro
    ecc...
    ...e la macro avrà un solo nome.
Devi accedere o registrarti per scrivere nel forum
24 risposte