Definire un mio filtro nella maschera figlia

di il
9 risposte

Definire un mio filtro nella maschera figlia

Stavo tentando di modificare secondo le mie esigenze una parte delle istruzioni VBA connesse ad un pulsante presente in una maschera madre
che apre la maschera figlia utilizzando il filtro preimpostato nelle proprietà di tale maschera.
Preferirei , aprire la maschera figlia senza alcun filtro (almeno quando la apro senza utilizzare il pulsante) ed implementare uno o più filtri solo se apro la maschera dal pulsante o da un altro di un'altra maschera.
Inoltre lo stesso codice potrei doverlo usare su maschere diverse , motivo per cui volevo utilizzare una variabile denominata MFA (MascheraFigliaAperta) e poi attribuire il filtro alla form il cui nome corrisponde alla variabile.

Riporto il codice di default che trovo nel pulsante automaticamente creato da ACCESS in due maschere collegate :
Sub InterruttoreCollegamento_Click()
On Error GoTo InterruttoreCollegamento_Click_Err

If ChildFormIsOpen() Then
CloseChildForm
Else
OpenChildForm
FilterChildForm

End If

InterruttoreCollegamento_Click_Exit:
Exit Sub

InterruttoreCollegamento_Click_Err:
MsgBox Error$
Resume InterruttoreCollegamento_Click_Exit

End Sub

ecco le mie on le mie INCOMPLETE e AZZARDATE modifiche:
dopo l'istruzione OpenChildForm
'volevo eliminare l'istruzione FilterChildForm

'ho definito la variabile MFA , cercando di rendere il valore di MFA uguale al nome della form aperta
Dim MFA As String
MFA = Me.Form.Name ' mi sono accorto che ottiene purtroppo il nome della form madre ed io cerco quella figlia (più giovane e carina )
'a questo punto come devo attivare il filtro per cui il valore del campo ID della maschera figlia (trattasi di campo contatore FK) coincida con quello della chiave primaria ID della Maschera Madre .
' ho tentato sbagliando come sempre Forms!MFA = ("[ID]='" & Me![ID].Value & "'") '

grazie per l'interessamento

9 Risposte

  • Re: Definire un mio filtro nella maschera figlia

    Quel codice è sconosciuto alla mia vista, essendo una conversione di una Macro...!

    Dovresti fare una cosa simile, ipotizzo che il Campo ID sia un Numerico Intero Lungo o AutoNumero
    
    Me!NomeContainerSubForm.Form.Filter="[ID]=" & Me![ID].Value
    Me!NomeContainerSubForm.Form.FilterOn=True
    
    Tuttavia non capisco la logica, sicuro di aver Collegato Campi Master/Secondari tra Form e SubForm....?
  • Re: Definire un mio filtro nella maschera figlia

    Secondo me non si tratta di maschera/sottomaschera, ma di maschere collegate. Calascibetta puoi chiarire?
  • Re: Definire un mio filtro nella maschera figlia

    Si confermo si tratta di maschere collegate, mi dispiace se non sono stato chiaro
  • Re: Definire un mio filtro nella maschera figlia

    @Alex ha scritto:


    Quel codice è sconosciuto alla mia vista, essendo una conversione di una Macro...!

    Dovresti fare una cosa simile, ipotizzo che il Campo ID sia un Numerico Intero Lungo o AutoNumero
    
    Me!NomeContainerSubForm.Form.Filter="[ID]=" & Me![ID].Value
    Me!NomeContainerSubForm.Form.FilterOn=True
    
    Tuttavia non capisco la logica, sicuro di aver Collegato Campi Master/Secondari tra Form e SubForm....?
    ho provato il codice ma, non va, verosimilmente ,perchè come ha evidenziato Osvaldo non si tratta di sottomaschere ma di maschere collegate create di default da access .
  • Re: Definire un mio filtro nella maschera figlia

    Chiamo MM=MascheraMadre, MF=MascheraFiglia, IDM la chiave primaria di TabellaMadre e chiave esterna di TabellaFiglia.
    MM dice di aprire MF e filtrare solo i record che hanno IDM quello esposto da MM!IDM. Pertanto scrivi all'evento "su clic" del Pulsante
    Private Sub NomePulsante_Click()
    DoCmd.OpenForm "MF", , , "[IDM] = " & Me!IDM
    End Sub
  • Re: Definire un mio filtro nella maschera figlia

    Private Sub NomePulsante_Click()
    DoCmd.OpenForm "MF", , , "[IDM] = " & Me!IDM
    End Sub
    l'istruzione che mi suggerisci si limita ad aprire la maschera col filtro che correla i due campi ID (FK e PK), quella che stavo cercando è strettamente correlata all'ipotesi di due maschere (una CHILD ed una PARENT), vorrei che il codice sia più generica e non già stabilito dal nome che devo manualmente riportare in VBA, piuttosto stabilito dal nome che dovrebbe restituire una variabile che la copia dalla form child.
    Provo a spiegare meglio, access mi ha creato 2 maschere collegate , le espressioni in VBA sono infatti generiche tipo openchildform e ParentFormIsOpen , lasciando intendere che il sistema, per qualche specifica motivazione (relazione di campi, filtro attivo o altro che non ho ancora di chiaro) riconosca da se senza doverne specificare il reale nome assegnato alle maschere. Ecco io vorrei che tale presupposto rimanga tale, anche perchè vorrei capire se questo tipo di maschere, l'una dipendente dall'altra, possono funzionare a catena (ad es. 4 o 5 maschere a cascata).
  • Re: Definire un mio filtro nella maschera figlia

    Io non ho capito nulla. Devi spiegare tutto con i nomi propri e fare qualche esempio pratico (almeno per me).

    calascibetta ha scritto:


    vorrei capire se questo tipo di maschere, l'una dipendente dall'altra, possono funzionare a catena (ad es. 4 o 5 maschere a cascata).
    Forse ti riferisci al noto meccanismo che va sotto il nome in gergo di "caselle combinate a cascata"...però spiegati meglio.
  • Re: Definire un mio filtro nella maschera figlia

    Ci provo
    creo 5 tabelle, (tb1;tb2;tb3;tb4;tb5)
    tb1 ha i seguenti campi: ID, numerofascicolo, anno
    tb2 ha i seguenti campi: ID, ufficiocompetente,stanza, IDtb1
    tb3 ha i seguenti campi: ID, azienda,ubicazione,IDtb2
    tb4 ha i seguenti campi: ID, tipologiaintervento, IDtb3
    tb5 ha i seguenti campi: ID, dataintervento, operatori,esito, IDtb4
    stabilisco di relazionare i campi PK e FK es: tb1.ID e tb2.Itb1
    successivamente creo 5 maschere singole , una per ogni tabella

    Tropo infatti poco pratico (e poco facilmente visualizzabile nella sua completezza a video) riportare 4 sottomaschere nella maschera tb1, modo con cui avrei la possibilità di per esempio aggiungere una nuova informazione nella sottomaschera tb5.
    Sto valutando dunque di poter aprire a cascata le 5 maschere, in modo ad esempio di consentire l'inserimento dei dati in un nuovo record della tb5, e forse l maschere collegate , opportunamente perfezionate da altro codice VBA possono consentirlo.
    esempio tb1 63, 34, 2020 --- tb2 89, ufficio20, 55, 63 --- tb3 111,pescheria sempronio,via Torino 5 - La Spezia,89 ---tb4 167, sanificazione, 111 --- tb5 199, 03/05/2020, rizzo e rossi, concluso, 167

    pensa dunque di aggiungere, nel caso di maschere parent e child a catena, un nuovo record tb5 232, 03/05/2020, rizzo e rossi, concluso, 167 (cioè sempre correlato al campo ID 167 della tb4, che a sua volta resta correlato ai campi FK e PK 89 della tabella superiore ed a salire fino alla prima tabella).

    chiedo scusa se mi esprimo in maniera inappropriata ed approssimata
  • Re: Definire un mio filtro nella maschera figlia

    Prova a leggere qui e vedi se rispecchia il tuo problema
    forum.masterdrive.it/access-79/controlli-bound-sincronizzati-in-cascata-45725/


    Vorrei sottolineare alcune lacune logiche:
    1. Le tabelle devono avere un nome chiaro ed esplicito e con denominazione al plurale.
    2. Idem dicasi per i campi ID. Meglio IDPersona, IDOrdine, IDFornitore...
Devi accedere o registrarti per scrivere nel forum
9 risposte