Newsgroup: it.comp.appl.access
Titolo: Problema con Query semplice

Hi all!
Ho un problema con una semplice query...
Ho una maschera dove sono contenuti dei campi che l'utente puo' decidere di
riempire per effettuare una ricerca su una tabella tramite la suddetta
query.
Vorrei che l'utente potesse lasciare in bianco alcune caselle (o
eventualmente tutte, per ottenere tutta la tabella) in modo tale da poter
realizzare la ricerca secondo diversi parametri.
Sui criteri della query ho utilizzato l'istruzione:
IIF(Forms![MioForm]![CasellaTesto1]=null;like"*";Forms![MioForm]![CasellaTes
to1])
In modo tale da utilizzare come criterio il LIKE "*" nel caso di casella
vuota o, al contrario,  il contenuto della casella stessa.
Purtroppo non funge!!! Anche sostituendo il NULL con ""
Qualcuno puo' aiutarmi?
Thanks in advance...
Ciao, Alfonso.

 to1])

 ha scritto nel messaggio
news:9pq9jq$to7$1...@nreada.inwind.it...

Anzi, scrivi così
like Forms![MioForm]![CasellaTesto1] & "*",
se nella casella non c'è scritto nulla allora prenderà tutti i valori

 ha scritto nel messaggio
news:9pq9jq$to7$1...@nreada.inwind.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.
Christian

 ha scritto nel messaggio
news:9pq9jq$to7$1...@nreada.inwind.it...

Se vuoi farlo con una IIf, a mio avviso nei criteri della query dovresti
scrivere:
Like IIf(IsNull(Forms![MioForm]![CasellaTesto1]); "*";
Forms![MioForm]![CasellaTesto1])
Altrimenti prova a scrivere nei criteri della query:
Like Nz(Forms![MioForm]![CasellaTesto1];"*")
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------