Newsgroup: it.comp.appl.access
Titolo: Filtro Recordset

La seguente sub serve per filtrare un recordset in base a 2 campi data
inseriti in una Frm di selezione;
Sub FILTRO()
    Dim DInizio As Variant
    Dim DFine As Variant
    DInizio = Format(Me.[DataIniziale], "0")
    DFine = Format(Me.[DataFinale], "0")
    If Forms![FrmSelezione]![DataIniziale] <> "" Then
        If Forms![FrmSelezione]![DataFinale] <> "" Then
            Filtro = "FORMAT([Data],'0') BETWEEN " & DInizio & " AND " &
DFine    'Seleziona i record compresi fra DInizio e DFine
        Else
            Filtro = "FORMAT([Data],'0') >=" & DInizio      'Seleziona i
record maggiori di DInizio
        End If
    Else
        If Forms![FrmSelezione]![DataFinale] <> "" Then
            Filtro = "FORMAT([Data],'0')<=" & DFine    'Seleziona i record
minori di DFine
        Else
            Filtro = "FORMAT([Data],'0')>" & 0        'Seleziona tutti
        End If
    End If
End Sub
essa funziona solo se il campo [Data] su cui viene fatta la ricerca non
contiene valori NULL; come devo modificarla per ovviare al problema
(in pratica voglio sapere come si scrive una stringa da passare a "Filtro"
che faccia un controllo su "Format([Data],'0') per escludere i record che
contengono valori NULL).
Grazie a tutti coloro che cercheranno di aiutarmi e se sono stato poco
chiaro, scusatemi...

 ha scritto nel messaggio
news:g0rf9.7558$6O4.1...@twister1.libero.it...

Scusa eh?
Ma tu i record con data null li vuoi selezionare o escludere?
Se li vuoi escludere, già te lo fa...
se li vuoi selezionare aggiungi nella stringa filtro anche un
OR is null
Antonio

 ha scritto nel messaggio
news:g0rf9.7558$6O4.1...@twister1.libero.it...

Ma FILTRO è una Sub o una FUNCTION?
Da dove viene richiamata visto che una volta usi Me e una volta fai
riferimento alla Maschera?
Function FILTRO()
     Dim DInizio As Variant
     Dim DFine As Variant
     Dim strFiltro
     DInizio = Format(Me.[DataIniziale], "0")
     DFine = Format(Me.[DataFinale], "0")
    strFiltro="Not IsNull([Data])"
    If Forms![FrmSelezione]![DataIniziale] <> "" Then
        strFiltro = strFiltro & "And FORMAT([Data],'0') >=" & DInizio
    endif
    If Forms![FrmSelezione]![DataFinale] <> "" Then
        strfiltro= strfiltro & " And FORMAT([Data],'0')<=" & DFine
    endif
    filtro=strfiltro
end function



Io voglio escludere i record con data null; utilizzando questa sub compare
un  MsgBox di errore che cita  "Tipi di dati non corrispondenti
nell'espressione criterio"

 nell'espressione criterio"
Perchè hai scritto in alcuni casi "0" (che è giusto) e in altri '0' (che è
sbagliato) ?
Perchè metti quel format alla data quando il controllo >= between ecc. li
puoi fare con la data in formato data?
Antonio

 Ma FILTRO č una Sub o una FUNCTION?


 il dato inserito. In ogni caso ora sembra funzioni...
La prossima volta scrivi dopo il quoting
Ti ho chiesto se era una Funzione perchè sembrava quasi restituissi il
risultato (a meno che Filtro non fosse una variabile globale).
Cosa vuol dire che usi Me. per richiamare il dato inserito?
Vabbeh, comunque se hai raggiunto lo scopo...
Fabio


X FABIO
Ok x il quoting
Filtro č infatti una variabile globale!
Volevo dire che Me.NomeCampo  e Forms![NomeFrm]![NomeCampo] portano allo
stesso risultato, ma mi ero spiegato da cani!
Ancora un problema: la Sub modificata č:
Sub FILTRO()
    Dim DInizio As Variant
    Dim DFine As Variant
    Dim StrFiltro As String
    DInizio = Format(Me.[DataDa], "0")
    DFineVersa = Format(Me.[DataA], "0")
    StrFiltro = "Not IsNull([Data])"
        If Me.DataDa <> "" Then
            If Me.DataA <> "" Then
              FiltroGlob = "(" & StrFiltro & " AND (FORMAT([Data],'0')
BETWEEN " & DInizio & " AND " & DFine & "))"   'FUNZIONA
                Else
                FiltroGlob= "(" & StrFiltro & " AND (FORMAT([Data],'0')>=" &
DInizio & "))"        'NON FUNZIONA: Msg: "Tipi di dati nn corrisp. ecc."
            End If
        Else
            If Me.DataA <> "" Then
                FiltroGlob = "(" & StrFiltro & " AND (FORMAT([Data],'0')<="
& DFine & "))"     'NON FUNZIONA: Msg: "Tipi di dati nn corrisp. ecc."
            Else
                FiltroGlob = "(Not " & StrFiltro & " OR FORMAT([Data],'0')>"
& 0 & ")"    'FUNZIONA
            End If
    End If
End Sub
Quindi se ho inserito solo la DataInizale o solo la DataFinale riesce a
filtrare; negli altri 2 casi invece funziona.
Dove sto sbagliando?
Insider


Correzione al messaggio precedente; scusate l'errore, ma ci mancava un NON
fondamentale!
X FABIO
Ok x il quoting



Sub FILTRO()




End Sub
Quindi se ho inserito solo la DataInizale o solo la DataFinale NON riesce a


 ha scritto nel messaggio
news:XjDf9.11382$6O4.1...@twister1.libero.it...

 Ho scritto '0' quando il Format è a sua volta assegnato ad una variabile
stringa per creare il Filtro e quindi le " devono essere sostituite con ':
sbaglio?

 sbaglio?
Mi sa di sě, perň non sono sicuro. Per sicurezza mettici i doppi apici
raddoppiati
""0""
Antonio

 ha scritto nel messaggio
news:d3Hf9.12555$6O4.2...@twister1.libero.it...

Stesso risultato: '0' coincide con ""0""!

> "Insider" [...]:

        Nz([Data], 0)
restituisce il valore di Data oppure 0 se il valore di Data e' Null. Quindi
direi:
        Format(Nz([Data], 0), '0')
    O no?
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

     O no?
    No!
    DInizio e' una stringa che rappresenta un numero (un numero seriale di
data) quindi a sinistra dell'operatore di confronto bisogna essere sicuri
che ci sia un numero:
        CDbl(Nz([Data], 0))


 ha scritto nel messaggio
news:alnjja$1s238b$1...@ID-52090.news.dfncis.de...

BINGO! Grazie infinite Maurizio

 Ancora un problema: la Sub modificata è:

A occhio direi che devi verificare che DataDa (o DataA) sia diverso da null
e non da "" (stringa vuota).
Senza fare però 1000 if concatenati prova ad adattare la versione "ridotta"
che ti avevo postato prima.
Fabio