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

di Azucarea il
4 risposte

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

  • Devi usare il metodo openargs.

  • 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.

  • 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é

  • 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