Passaggio a nuova maschera filtrando dati per l'ID della precedente

di il
4 risposte

Passaggio a nuova maschera filtrando dati per l'ID della precedente

Vorrei mettere un pulsante ad una maschera collegata ad una tabella di dati di persone. Al click deve aprirne un'altra (collegata ad un'altra tabella) permettere di inserire altri dati relativi alla persona in maschera (tramite copia dell'ID tra una maschera ed un'altra), inoltre dovrebbe filtrare per l'ID i dati già inseriti in modo tabellare.

Riesco a fare tutto tranne filtrare i dati.

Faccio aprire la nuova maschera al clic del pulsante e copiare l'ID nella nuova maschera, tramite il codice:

Private Sub Btn_IstTrasf_Click()
      On Error GoTo Err_Btn_IstTrasf_Click
       DoCmd.OpenForm "IstanzeTrasfMask"
       Forms!IstanzeTrasfMask!DipIT = Me!IdDipendente
       [Form_Protocollo].Visible = False
      Exit Sub
Err_Btn_IstTrasf_Click:
   MsgBox Err.Description
End Sub

Per filtrare i dati nella maschera ho cambiato origine generando una query basata sulla tabella e come criterio nel campo [DipIstTrasf] ho inserito:

[Maschere]![IstanzeTrasfMask]![DipIT]

Ma non funziona. Però mettendo manualmente il numero relativo ad un ID funziona. Dove sbaglio?

4 Risposte

  • Re: Passaggio a nuova maschera filtrando dati per l'ID della precedente

    Devi usare il metodo openargs.

  • Re: Passaggio a nuova maschera filtrando dati per l'ID della precedente

    Ci capisco poco, la spiegazione, almeno per me, è un po' confusa. Se vuoi aprire una nuova maschera che abbia come criterio di filtro un valore presente nella maschera chiamante usa la WhereCondition.

    DoCmd.OpenForm "IstanzeTrasfMask", , , "DipIstTrasf = " & Me.DipIT.Value

    Se è un valore testuale e non numerico deve essere racchiuso tra apici.

    Se poi l'inserimento (che non ho capito) che fai attraverso quella maschera deve essere recepito nella maschera chiamante devi usare anche il parametro WindowMode valorizzato ad acDialog, per poi fare il requery della maschera chiamante quando si chiude (o viene nascosta) la maschera chiamata.

    Butta l'occhio qua: https://learn.microsoft.com/en-us/office/vba/api/access.docmd.openform

    Preferenza personale: con OpenForm quando cominciano ad esserci più parametri oltre al classico nome della maschera preferisco usare la chiamata nominativa dei parametri, altrimenti non capisco mai a cosa serve quello che ho scritto.

    DoCmd.OpenForm FormName:="nomedellamaschera", WhereCondition:="condizionewheredaapplicare", WindowMode:= acDialog

    L'intellisense aiuta molto mentre scrivi, non quando lo leggi però. Così è più lungo ma chiaro, almeno per me.

  • Re: Passaggio a nuova maschera filtrando dati per l'ID della precedente

    01/01/2024 - Philcattivocarattere ha scritto:


    Ci capisco poco, la spiegazione, almeno per me, è un po' confusa. Se vuoi aprire una nuova maschera che abbia come criterio di filtro un valore presente nella maschera chiamante usa la WhereCondition.

    DoCmd.OpenForm "IstanzeTrasfMask", , , "DipIstTrasf = " & Me.DipIT.Value

    Grazie mille, il concetto ha funzionato, ho modificato solo il campo corretto:
           DoCmd.OpenForm "IstanzeTrasfMask", , , "DipIstTrasf = " & Me.IdDipendente.Value

    hai capito che sto imparando il VBA sul campo, dedicandomi a questo database adattandolo alle mie vicissitudini ;).

    01/01/2024 - fratac ha scritto:


    Devi usare il metodo openargs.

    Sarebbe interessante approfondire l'argomento, anche se dalle fonti consultate fino ad adesso non ho capito granché

  • Re: Passaggio a nuova maschera filtrando dati per l'ID della precedente

    01/01/2024 - fratac ha scritto:


    Devi usare il metodo openargs.

    Direi proprio di no…. basta la WHERE e probabilmente con acDialog se deve condizionare il rientro.

Devi accedere o registrarti per scrivere nel forum
4 risposte