Intanto è evidente che per fare certe cose servono le Basi, altrimenti è improponibile... se non le hai quello di cui si sta parlando è di difficile Comprensione, nel senso che devi prenderti il tempo che serve per approfondire le cose.
Ovvio è che non posso fornirti Codice completo, nè fare un Corso di Access Online, perchè non è nello spirito del Gruppo.
Provo a darti delle indicazioni, poi ci devi mettere del tuo per studiarci sopra e sperimentare.
Premessa: Maschera basata su Tabella [T1] con tutti i controlli associati a campi nel Corpo della stessa
IdPK [Numerico Intero Lungo] Chiave Primaria
Cognome [Testo]
Nome [Testo]
Sesso [Testo]
Destiniamo quindi a titolo di chiarimento l'intestazione della Maschera per inserire i controlli NON ASSOCIATI destinati a Filtro e Ricerca.
I controlli possono essere TextBox, o ComboBox.
Le comboBox devon essere specifiche, quindi 4 COmbo:
1° Combo Completa Puoi avere N Colonne ma Colonna associata la PK della Tabella.
2° Combo Cognome RowSource----> SELECT DISTINCTROW Cognome From T1 ORDER BY Cognome
3° Combo Nome RowSource----> SELECT DISTINCTROW Nome From T1 ORDER BY Nome
4° Combo Sesso RowSource----> SELECT DISTINCTROW Sesso From T1 ORDER BY Sesso
Prima ho distinto le 2 Parole( Filtro e Ricerca), in quanto hanno 2 funzioni differenti e 2 tecniche differenti.
Diciamo che sarebbe meglio sapere prima come agire, si può quindi predisporre una OptionGroup per definire se Ricerca(Valore 1) o se Filtro(Valore 2), ed un Button per APPLICARE (Filtro/RIcerca)
Su After Update dell'OptionGroup secondo me si disabilitano i controlli NON UTILI alla ricerca... i questo caso l'unico utile è la Combo con l'elenco completo, quindi si disabilitano gli altri
Priavate NomeOptionGropup_AfterUpdate()
Me!ComboCompleta.SetFocus
Me!NomeComboCognome.Enabled=Me!NomeOptionGropup.Value=2
Me!NomeComboNome.Enabled=Me!NomeOptionGropup.Value=2
Me!NomeComboSesso.Enabled=Me!NomeOptionGropup.Value=2
End Sub
Ricerca
Non filtra, ma semplicemente Visualizza il Record Cercato(se esiste) e lascia inalterato l'elenco dati della Maschera.
Questa funzione si effettua con una ComboBox, popolata con l'elenco completo dei Records della Maschera, deve avere come Colonna associata la PK della Tabella.
Il Codice da usare su Click della Button per Applicare Filtro/Ricerca è da differenziare a seconda della Selezione:
Pribvate Sub NomeButton_Click()
Select Case Me!NomeOptionGropup.Value
Case 1 ' Ricerca
With Me.RecordsetClone
.FindFirst "IdPK=" & Me!NomeCombo.Value
If Not .NoMatch Then
me.Bookmark=.Bookmark
Else
MsgBox "Non trovato"
End If
End With
Case 2 ' Filtro
' Sviluppata sotto....
End Select
End Sub
Filtro
Il Filtro invece agisce restringendo l'elenco dei Records a solo quelli che SODDISFANO il Criterio.
La prima cosa da capire è che se un CRITERIO NON SERVE non si usa... molti li inseriscono rendendo le queries lente per inefficienza.
I criteri è bene vengano dosati solo sui campi veramente utili ed in questo caso è meglio che tali campi siano INDICIZZATI.
Nel tuo caso quindi potresti avere 4 Criteri, uno Numerico e 3 Testo come esposto all'inizio.
Ora quindi partiamo dalla gestione di Criteri Multipli o Composti...
I Criteri si aggregano tramite Operatori LOGICI AND/OR ecc... Logica BOOLEANA quindi AND devono essere VERI TUTTI, OR .... oppure basta uno..
Di solito si usa AND.
Il modo quindi per comporre un criterio è validare SOLO i campi che hanno un criterio da applicare...
Questa la Logica per costruire la Stringa del Criterio da applicare al Codice sopra...
Dim strWH As String
If Len(Me!ComboCompleta.Value & vbNullstring)>0 Then strWH=strWH & "IdPK=" & Me!Controllo1.Value& " AND " ' Numerico
If Len(Me!ComboCognome.Value & vbNullstring)>0 Then strWH=strWH & "Cognome='" & Replace(Me!ComboCognome.Value,"'","''") & " AND "
.... ' aggiungi le altre N condizioni...
If Len(strWH)>0 then strWH=Mid$(strWH,1,Len(strWH)-5)
Me.Filter=strWH
Me.FilterON=True
Ovviamente tutte queste INFO sono dei pezzi del Puzzle da unire sapendo il disegno... manca la gestione errori, manca il Reset dei controlli...
Credo tu abbia molto materiale ora da studiare e provare.