Newsgroup: it.comp.lang.visual-basic
Titolo: filtri in cascata

ciao a tutti.
ho creato una maschera di riepilogo dei diversi record di una tabella.
In questa maschera sono presenti diversi campi. Ogniuno di questi campi
viene filtrato singolarmente da una casella di testo presente nella
intestazione della maschera. quello che non riesco a fare però è
"sovrapporre" i diversi filtri.
faccio un esempio.
Se filtro il campo [anno] come "2006" mi mostra tutti i record con anno
2006.
se subito dopo filtro il campo [valore offerta] ">100" lui mi mostra
tutte le offerte di valore superiore a 100, e non solo quelle dell'anno
2006.
per creare i filtri ho usato le seguenti istruzioni:
______________
DoCmd.ApplyFilter , "([Riepilogo REQUISITI_ORDINI].[an_descr1] like " &
Chr(34) & Me.Prima & Chr(34) & ") Or ([Riepilogo
REQUISITI_ORDINI].[VENDITORE] like " & Chr(34) & Me.Prima & Chr(34) &
")"
_______________
x i campi testo e
_________________
f Anno <> "" Then
Me.Filter = "Year(DATA_INS) =" & Me!Anno
Me.FilterOn = True
Else
Me.FilterOn = False
End If
_________________
per i campi numerici.
spero di essere stato chiaro nella spiegazione, e che qualcuno possa
aiutarmi!!!
caio e grazie

 per i campi numerici.
Non vorrei che l'impostazione della proprietà filter annulli l'applyfilter
e viceversa. Perchè hai adottato due approcci diversi? Non era meglio
usare una unica stringa componendo tutti i criteri presenti?
-- 
Salutoni
Sergio
C'è il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

paolo ha scritto:

Ma stai parlando di un'applicazione fatta in VB6 o stamo parlando di
qualche cosa fatto in Access...?
Non sono certo che VB6 disponga di DoCmd e che le Form di Vb6 espongano
Filter e FilterOn....
Nel caso abbia indovinato, ti proporei di sfruttare i Ng dedicati ad
Access.
[Mi permetto l'eventuale divagazione....]
Io uso altri metodi, solitamente sfrutto controlli nei quali inserisco
un carattere nella proprietà TAG = "FILTER"
Ciclo la collection Controls(prendendo solo i controlli con
TAG="FILTER" e ricostruisco la stringa di filtro).
Nomino i Controlli che formeranno il Filtro con un nome che mi
restituisca il
FieldName del Campo
Es.:
NomeControllo= X_Fieldname
Quindi stippo il nome
FieldName=Mid$(Ctl.Name,3,Len(ctl.Name)
per sapere il FieldType faccio una SELECT * FROM T1 WHERE 1=0
che mi restituisce un rs vuoto con solo la struttura e passando il
FieldName
recupero il FieldType
rs.Fields(FieldName).FieldType
quindi con il metodo BuildCriteria(Access.VBA) mi faccio comporre
correttamente la stringa.....ecc...ecc....ecc...
Saluti
@Alex

Alessandro Baraldi ha scritto:

scusate il ritardo della risposta!!!
è una applicazione fatta usando il VB di Access.
alla fine sono riuscito a trovare un metodo usando degli "if" in questo
modo:
If CasellaCombinata227 <> "" Then
    If filterstring <> "" Then
            filterstring = filterstring & " AND " & "([Riepilogo
REQUISITI_ORDINI].[COMPILATORE] like " & Chr(34) &
Me.CasellaCombinata227 & Chr(34) & ")"
    Else
            filterstring = "([Riepilogo REQUISITI_ORDINI].[COMPILATORE]
like " & Chr(34) & Me.CasellaCombinata227 & Chr(34) & ")"
    End If
End If
If CasellaCombinata229 <> "" Then
    If filterstring <> "" Then
            filterstring = filterstring & " AND " & "([Riepilogo
REQUISITI_ORDINI].[TIPO DI APPARATO] = " & Chr(34) &
Me.CasellaCombinata229 & Chr(34) & ")"
    Else
            filterstring = "([Riepilogo REQUISITI_ORDINI].[TIPO DI
APPARATO] = " & Chr(34) & Me.CasellaCombinata229 & Chr(34) & ")"
    End If
End If
il problema ora me lo dà un unico campo che deve filtrare
contemporaneamente con un OR due campi. io ho usato questo metodo
If Prima <> "" Then
    If filterstring <> "" Then
            filterstring = filterstring & " AND " & "([Riepilogo
REQUISITI_ORDINI].[an_descr1] like " & Chr(34) & Me.Prima & Chr(34) &
") "
            filterstring = filterstring & " OR ([Riepilogo
REQUISITI_ORDINI].[VENDITORE] like " & Chr(34) & Me.Prima & Chr(34) &
")"
    Else
            filterstring = "([Riepilogo REQUISITI_ORDINI].[an_descr1]
like " & Chr(34) & Me.Prima & Chr(34) & ")"
            filterstring = filterstring & " OR ([Riepilogo
REQUISITI_ORDINI].[VENDITORE] like " & Chr(34) & Me.Prima & Chr(34) &
")"
    End If
End If
quando lo applico da solo il filtro funziona però prima di tutto
blocca dei successivi filtri, e se viene applicato dopo un'altro filtro
non filtra nel modo corretto, nel senso che elimina gli altri filtri.
penso che questo sia dovuto all' OR.
il problema però è che questo OR mi serve perchè le cose scritte
nella casella "prima" devono essere ricercate in due diversi campi e
devono essere visualizzati tutti i record contenenti quella parola.
qualcuno sà come posso fare?