Newsgroup: it.comp.appl.access
Titolo: ricerche combinate

Ciao a Ng, mi chiedevo se è possibile creare una ricerca che dia la
possibilità di riempire più campi, e di avviare tramite un pulsante.Per
esempio ho cinque possibili campi in cui inseririre diversi parametri, ora
vorrei per esempio la ricerca inserendo tre soli parametri lasciando gli
altri due vuoti.Dove potrei trovare un esempio caso simili?Ciao e grazie in
anticipo.
Christian

 wrote in message
U1Kq7.8054$P04....@news2.tin.it...

Nella tua query, in corrispondenza di ogni campo, metterai un criterio di
questo tipo
like nz([forms]![maschera filtro]![filtro1];"*")
dove filtro1 sarà il filtro associato a quel campo
Antonio

 ha scritto nel messaggio
news:U1Kq7.8054$P04....@news2.tin.it...

Prova ad usare il filtro in base a maschera.
--
Silvio
il sito comune di it.comp.appl.access:
http://www.sitocomune.com

 ha scritto nel messaggio
news:U1Kq7.8054$P04....@news2.tin.it...

Crei una maschera non associata, chiamata Ricerca Clienti
nella sezione corpo aggiungi una sotto maschera chiamata
SottoMascheraRicercaclienti basata sulla query della tabella di origine.
Ad esempio:
Tabella Clienti
CodCliente
RagioneSociale
Indirizzo
Cap
Città
Contatto
ecc...
Nella query di selezione che chiameremo qClienti, aggiungi i campi su cui
devi eseguire i filtri, tipo RagioneSociale, Indirizzo, Contatto ecc... li
puoi mettere anche tutti, poi sei tu che decidi su quali campi eseguire il
filtro.
Crei nell'intestazione della maschera tante caselle di testo non associate
quanti sono i campi della query su cui devi filtrare i dati.
Ad esempio:
caselle di testo          campo query
txtCercaRagioneSociale -> RagioneSociale
txtCercaIndirizzo      -> Indirizzo
txtCercaContatto       -> Contatto
ecc...
A questo punto devi creare una Sub privata chiamata Aggiungi, nella sezione
generale del modulo di classe della maschera:
questo è il codice commentato da scrivere:
Private Sub Aggiungi(ValoreCampo As Variant, NomeCampo As String, _
Criteri As String, NumArgomenti As Integer)
    ' Crea i criteri per la clausola WHERE.
    If ValoreCampo <> "" Then
    ' Aggiunge "and" se esiste un altro criterio.
        If NumArgomenti > 0 Then
            Criteri = Criteri & " and "
        End If
        ' Accoda il criterio  ai criteri esistenti.
        ' Aggiunge ValoreCampo e l'asterisco tra virgolette.
        Criteri = (Criteri & NomeCampo & "Like " & Chr(39) & ValoreCampo & _
        Chr(42) & Chr(39))
        'Aumenta il numero degli argomenti.
        NumArgomenti = NumArgomenti + 1
    End If
End Sub
Crea un'altra Sub privata chiamata DisattivaControllo, questo è il codice:
Private Sub DisattivaControllo()
    ' Se attivato, disattiva il controllo nella sezione Corpo dopo
    ' la modifica del criterio di ricerca.
    If Me!SottoMascheraRicercaClienti.Enabled Then
        AttivaControl Me, acDetail, False
    End If
End Sub
Aggiungi due pulsanti di comando nell'intestazione della maschera chiamati
Visualizza e Cancella.
Nell'evento Click() del pulsante Visualizza, scrivi questo codice:
Private Sub Visualizza_Click()
    ' Crea una clausola WHERE utilizzando i criteri di ricerca immessi
dall'utente
    ' e imposta la proprietà "RecordSource" ("Origine record") della
    ' SottoMascheraRicercaClienti.
    Dim MioSQL As String, Criteri As String, MiaOrigineRecord As String
    Dim NumArg As Integer
    ' Inizializza il conteggio degli argomenti.
    NumArg = 0
    ' Inizializza l'istruzione SELECT.
    MioSQL = "SELECT * FROM [qClienti] WHERE "
    Criteri = ""
    ' Utilizza i valori immessi nelle caselle di testo dell'intestazione
della
    ' maschera per creare criteri per la clausola WHERE.
    Aggiungi [txtCercaRagioneSociale], "[RagioneSociale]", Criteri, NumArg
    Aggiungi [txtCercaIndirizzo], "[Indirizzo]", Criteri, NumArg
    Aggiungi [txtCercaContatto], "[Contatto]", Criteri, NumArg
    ' Se non è stato specificato alcun criterio, restituisce tutti i record.
    If Criteri = "" Then
        Criteri = "True"
    End If
    ' Crea l'istruzione SELECT.
    MiaOrigineRecord = MioSQL & Criteri
    ' Imposta la proprietà "Origine record" della
SottoMascheraRicercaClienti.
    Me![SottoMascheraRicercaClienti].Form.RecordSource = MiaOrigineRecord
    ' Se nessun record corrisponde ai criteri, visualizza un messaggio.
    ' Seleziona il pulsante Cancella.
    If Me!SottoMascheraRicercaClienti.Form.RecordsetClone.RecordCount = 0
Then
        MsgBox "Nessun record corrisponde ai criteri immessi.", 48, "Nessun
record trovato"
        Me!Cancella.SetFocus
        Else
        'Attiva il controllo nella sezione Corpo.
        AttivaControl Me, acDetail, True
        'Seleziona la SottoMascheraRicercaClienti.
        Me!SottoMascheraRicercaClienti.SetFocus
    End If
End Sub
Nell'evento Click() del pulsante Cancella, scrivi questo codice:
Private Sub Cancella_Click()
    '  Cancella i controlli nella intestazione della maschera e rimuove
    '  i record dalla sottomaschera.
    '
    Dim MioSQL As String
    MioSQL = "SELECT * FROM [qClienti] WHERE TRUE"
    '  Cancella le caselle di testo contenenti i criteri di ricerca.
    Me!txtCercaRagioneSociale = Null
    Me!txtCercaIndirizzo = Null
    Me!txtCercaContatto = Null
    '  Reimposta la proprietà "Origine record" ("RecordSource")
    '  della sotto maschera per rimuovere i record.
    Me![SottoMascheraRicercaClienti].Form.RecordSource = MioSQL
    '  Seleziona la casella di testo "txtCercaRagioneSociale".
    Me![txtCercaRagioneSociale].SetFocus
End Sub
Nell'evento DopoAggiornamento della casella di testo, scrivi questo codice:
Private Sub txtCercaRagioneSociale_AfterUpdate()
  'Disattiva il controllo nella sezione corpo dopo
  'la modifica del criterio di ricerca.
    DisattivaControllo
End Sub
Questo lo ripeti per tutte le caselle di testo dell'intestazione
Nell'evento Su Apertura della maschera scrivi questo codice:
Private Sub Form_Open(Cancel As Integer)
  Me![txtCercaRagioneSociale].SetFocus
End Sub
------------------ Tutto qui. ----------------------
Adesso devi creare un modulo generale e lo salvi col nome Funzioni Utilità.
Scrivi la Funzione AttivaControl:
Function AttivaControl(frm As Form, strSezione As Integer, intStato As
Boolean) As Boolean
    'Attiva o disattiva i controlli in sezione specificata della maschera
    'Utilizza l'oggetto Form, la costante di sezione e specifica gli
argomenti
    'passati all routine AttivaControl
    Dim ctl As Control
    'Imposta intStato per tutti i controlli nella sezione specificata.
    For Each ctl In frm.Controls
        If ctl.Section = strSezione Then
            On Error Resume Next
            ctl.Enabled = intStato
            Err = 0
        End If
    Next ctl
    AttivaControl = True
End Function
Questo è tutto... ciao, ho fatto un esempio su una ricerca clienti, ma puoi
creare qulsiasi tipo di ricerca.