Forms |
3.31 Filtrare una maschera in base al valore contenuto in un controllo di una sua sottomaschera. |
Roberto |
(D) Come si può filtrare una maschera in base al valore contenuto in un controllo di una sua sottomaschera? (R) Presupposti. La maschera principale si chiama Maschera ed ha come origine record una tabella (tbl_Ordini) che ha come chiave primaria un campo contatore o numerico chiamato NrOrd. La sottomaschera ha come origine record una tabella (tbl_DetOrdini) in relazione uno-a-molti con la tabella tbl_Ordini tramite il campo NrOrd. La tabella tbl_DetOrdini contiene anche un campo di tipo numerico chiamato CodArt. Esiste anche una tabella tbl_Articoli composta da un campo CodArt (chiave primaria) ed un campo di tipo testo chiamato DescrArt. Soluzione. Nell’intestazione di Maschera inserire una casella combinata non associata a due colonne (delle quali visibile solo la seconda) e chiamata Articolo; dare alla casella combinata un valore predefinito uguale a 0 (zero). Come origine riga della casella combinata inserire il nome di una query unione che abbia il seguente codice SQL: SELECT 0 As CodArt, "<Tutti>" As DescrArt FROM tbl_Articoli UNION SELECT tbl_Articoli.CodArt, tbl_Articoli.DescrArt FROM tbl_Articoli;A fronte dell’evento "Dopo aggiornamento" della casella combinata Articolo generare il seguente codice VBA: Private Sub Articolo_AfterUpdate() Dim db As DAO.Database, rst As DAO.Recordset Dim strArt As String, gstr As String gstr = "" If Me!Articolo <> 0 Then strArt = "[CodArt] =" & Me!Articolo gstr = "[NrOrd] IN (Select NrOrd From tbl_DetOrdini Where " _ & strArt & ")" Set db = CurrentDb Set rst = db.OpenRecordset("SELECT DISTINCTROW " & _ "tbl_Ordini.NrOrd " & _ "FROM tbl_Ordini" & _ " WHERE " & gstr & ";") If rst.RecordCount = 0 Then MsgBox "Non ci sono Ordini che soddisfano i criteri", _ vbExclamation, "Esito ricerca negativa" gstr = "" rst.Close Exit Sub End If rst.Close End If If Me!Articolo = 0 Then DoCmd.Close acForm, Me.Name End If DoCmd.OpenForm FormName:="Maschera", _ WhereCondition:=gstr End SubAprendo Maschera, dalla lista della casella combinata selezionare il nome dell’articolo desiderato o scegliere la scritta <Tutti> nel caso si voglia visualizzare tutti gli ordini. Nota La sub di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, è necessario aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library. Download: |