Newsgroup: it.comp.appl.access
Titolo: Filtri in base a range di valori

Ho un piccolo problema con una maschera, all'interno del quale vorrei
filtrare dei record in base ad una campo "peso". Il problema sta nel
fatto che voglio dare un range di valori: es. filtra tutti i record
con "peso" compreso tra 2 e 135 e quindi applicare tramite un pulsante
o quant'altro il filtro...

 ha scritto nel messaggio 
news:1190018828.0...@o80g2000hse.googlegroups.com...

Se il valore è numerico ti basta mettere un criterio nella query:
between 2 and 135
Ciao, Carlo 

 ha scritto nel messaggio 
news:1190018828.0...@o80g2000hse.googlegroups.com...

Aggiungo che se il range si trova in due controlli distinti sulla maschera 
puoi sempre fare la stessa cosa con la query:
between Forms!NomeMaschera!NomeControlloDa and 
Forms!NomeMaschera!NomeControlloA
Ovviamente dovrai applicare la query come origine record alla maschera
Ciao, Carlo

 ha scritto nel messaggionews:1190018828.0...@o80g2000hse.googlegroups.com...

Grazie Carlo per la risposta.
ti spiego meglio il problema:
ho la mia bella maschera con un elenco di prodotti generati da una
query.
a video vorrei filtrare questo elenco, appunto come dicevi tu, con 2
controlli distinti posizionati nella stessa maschera,
e successivamente (inserito il range di valori) con un pulsante
applicare il filtro.
Questo mi serve per modificare contemporaneamente con una query di
aggiornamento i prezzi di tutti i record filtrati (ma questo già lo so
fare).
Se immetto un criterio alla query, all'apertura della maschera non
vedo nessun record fino a quando non
inserisco il range. E io ho la necessità di vedere prima la lista dei
record (appunto all'apertura della maschera)
Spero di esser stato chiaro e grazie ancora per la risposta...

 ha scritto nel messaggio 
news:1190026592.6...@57g2000hsv.googlegroups.com...




--------------------
Se i valori di range risiedono nella maschera è evidente che non puoi 
visualizzarli fino alla loro immissione.
Apri la maschera con una query generica...imposti i valori di range e solo 
ora applichi il filtro...cioè l'origine record della maschera diventa la 
query con il criterio.
Puoi anche tenere in memoria i valori assegnandoli a due variabili globali o 
scrivendoli di volta in volta in una tabella di appoggio. In questo caso 
potrai sempre usare i due valori...almeno fino al loro cambio, quando sarà 
necessario riscriverli.
Cosa preferisci fare?
Ciao, Carlo

 - Mostra testo tra virgolette -
Penso che andrebbe bene il primo caso:
"... Apri la maschera con una query generica...imposti i valori di
range e solo
 ora applichi il filtro...cioè l'origine record della maschera diventa
la
 query con il criterio...."
ed è questo passaggio che non riesco a fare!!!
Ciao Ciccio

 ha scritto nel messaggio 
news:1190033027.6...@57g2000hsv.googlegroups.com...
cut
Penso che andrebbe bene il primo caso:
"... Apri la maschera con una query generica...imposti i valori di
range e solo
 ora applichi il filtro...cioč l'origine record della maschera diventa
la
 query con il criterio...."
ed č questo passaggio che non riesco a fare!!!
Ciao Ciccio
Fino a creare la query con criteri ci sei?
Salva con nome questa query.
Appena avrai immesso i parametri, per esempio al click di un pulsante, 
scrivi da codice:
Me.RecordSource = "TuaQueryConCriteri"
Me.Requery
Provvediti di un secondo pulsante che elimina il filtro applicato:
Me.RecordSource = "TuaQueryNormale"
Me.Requery
Ciao, Carlo

Ciao Carlo,
Ho risolto in modo diverso.
Nella maschera incriminata utilizzo questo codice
.....
Private Sub consegnatario_AfterUpdate()
If strGetFilter = "" Then
        DoCmd.ShowAllRecords
    Else
        DoCmd.ApplyFilter , strGetFilter
    End If
End Sub
Private Sub corriere_AfterUpdate()
    If strGetFilter = "" Then
        DoCmd.ShowAllRecords
    Else
        DoCmd.ApplyFilter , strGetFilter
    End If
    Refresh
End Sub
Private Function strGetFilter() As String
    Dim strFilter(100) As String
    Dim intIndice As Integer
    ' Casella azienda
    If Me!azienda.Column(0) <> "" Then
        strFilter(1) = "(IDazienda = Forms![insprovvigioni]!azienda)"
    End If
    '  Casella corriere
    If Me!corriere.Column(0) <> "" Then
        strFilter(2) = "(idcorriere = Forms![insprovvigioni]!
corriere)"
    End If
     '  Casella vettore
    'If Me!Vettore.Column(0) <> "" Then
     '   strFilter(3) = "(nomevettore = Forms![insprovvigioni]!
vettore)"
    'End If
     '  Casella bolla
    If Me!bolla.Column(0) <> "" Then
        strFilter(4) = "(numerobolla = Forms![insprovvigioni]!bolla)"
    End If
    '  Casella catbolla
    If Me!catbolla.Column(0) <> "" Then
        strFilter(5) = "(bollacat = Forms![insprovvigioni]!catbolla)"
    End If
    '  Casella consegnatario
    If Me!consegnatario.Column(0) <> "" Then
        strFilter(6) = "(idconsegnatario = Forms![insprovvigioni]!
consegnatario)"
    End If
    '  Casella consegnatario
    If Me!tra <> "" Then
       strFilter(7) = "(peso >= Forms![insprovvigioni]!tra)"
    End If
    '  Casella consegnatario
    If Me!e <> "" Then
       strFilter(8) = "(peso <= Forms![insprovvigioni]!e)"
    End If
    For intIndice = 1 To 100
        If strFilter(intIndice) <> "" Then
            If strFilter(0) <> "" Then
                strFilter(0) = strFilter(0) + " AND "
            End If
            strFilter(0) = strFilter(0) + strFilter(intIndice)
        End If
    Next intIndice
    strGetFilter = strFilter(0)
End Function
............................
A questo filtro ho aggiunto il range "peso" e diciamo che in qualche
modo ho risolto....
Ora invece mi sono accorto che in questa maschera, applicati i filtri,
gli stessi rimangono in memoria.
Premessa la maschera è basata su una query dove è impostato un
criterio su una data (data bolla) e quindi quando
apro la maschera per poter vedere i record devo prima impostare un
range di date con 2 controlli.
Il problema è che questo criterio, una volta utilizzati i suddetti
filtri, non funziona + sono costretto a chiudere/riaprire la maschera.
Grazie Ciccio

 ha scritto nel messaggio 
news:1190053431.5...@r29g2000hsg.googlegroups.com...
Ciao Carlo,
Ho risolto in modo diverso.
Nella maschera incriminata utilizzo questo codice
cut
A questo filtro ho aggiunto il range "peso" e diciamo che in qualche
modo ho risolto....
Ora invece mi sono accorto che in questa maschera, applicati i filtri,
gli stessi rimangono in memoria.
Premessa la maschera è basata su una query dove è impostato un
criterio su una data (data bolla) e quindi quando
apro la maschera per poter vedere i record devo prima impostare un
range di date con 2 controlli.
Il problema è che questo criterio, una volta utilizzati i suddetti
filtri, non funziona + sono costretto a chiudere/riaprire la maschera.
Grazie Ciccio
-------------------------
Ti conviene rivolgerti a chi ti ha fornito quel codice...francamente non ho 
il tempo per occuparmene.
Ciao, Carlo 

 ha scritto nel messaggionews:1190053431.5...@r29g2000hsg.googlegroups.com...

Carlo, grazie per l'aiuto che mi hai fornito.
Per quanto riguarda il codice non me lo ha fornito nessuno.
Sono autodidatta e come tale ho passato diverse notti per arrivare a
quella soluzione.
Da diversi anni mi sono intestardito a crearmi delle applicazioni
personalizzate in Access e questa
è stata la prima volta che ho richiesto aiuto a qualcuno...
Grazie ancora.

 ha scritto nel messaggio 
news:1190053431.5...@r29g2000hsg.googlegroups.com...
Ciao Carlo,

.....













............................


Grazie Ciccio
[risposta]
Ho notato, qualche volta, che viene impostato il salvataggio del filtro 
nelle proprietà della form. Controlla se c'è e impostalo a no.
Poi per annullare il filtro devi azzerare la stringa del metodo Filter 
(Me.Filter = ""); non basta invocare ShowAllRecords...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1190053431.5...@r29g2000hsg.googlegroups.com...

Nel caso specifico dove viene inserito il (Me.Filter = "")
Ciao.
Ciccio

 ha scritto nel messaggio 
news:1190123831.7...@19g2000hsx.googlegroups.com...


[risposta]
Al posto del ShowAllRecords; integralo anche con un Me.FilterOn = false.
Es.
If strGetFilter = "" Then
    Me.FilterOn = false
    Me.Filter = ""
...
Ciao.
-- 
Sergio MAZZA