SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

di il
17 risposte

17 Risposte - Pagina 2

  • Re: SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

    30/03/2024 - A.TIRANNA ha scritto:


    Non sono i filtri della sottomaschera che non funzionano e nemmeno ma la Query sottostante la sottomaschera che se apro a parte mi mostra i risultati corretti! ma il recordset nella sottomaschera (nonostante si veda che c'è un requery in atto) non si aggiorna.

    ma cosa c'è nel pulsantino filtri? passi da cliente=pippo a cliente= cosa???

    la query non si aggiorna in base a cosa? resta col filtro attivo o spariscono i record? se resta il filtro attivo ha una soluzione, se spariscono i record ha un'altra soluzione.

    03/04/2024 - A.TIRANNA ha scritto:


    a combo smette di funzionare.

    che significa smette di funzionare? ti avevo scritto prima che la combo deve avere un valore che include tutto “TUTTI” magari con indice 0 (zero).

    se invochi una query usando controlli e parametri, i controlli che passano i parametri devono essere sempre attivi, deve cambiare solo il parametro che passa il controllo (pippo se vuoi vedere pippo, tutti per visualizzare tutto igorando il parametro).

    all'inizio funziona perchè la query è soddisfatta, quando filtri la query è soddisfatta, quando togli il filtro la query non è soddisfatta. funziona se ritorna allo stato iniziale (chiudi e riapri).

    che codice usi per questi benedetti filtri quando li annulli?

  • Re: SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

    03/04/2024 - A.TIRANNA ha scritto:


    Ciao, in realtà la combobox che “comanda” la query smette di funzionare proprio nel momento in cui cancello tutti i filtri nella sottomaschera. Se anche uno solo dei filtri rimane attivo la combo funziona. Faccio un esempio relativo alla immagine che allego. 

    Ciao,

    è proprio quello che ti dicevo di verificare … con il debug prima e dopo i filtri (applicati e disattivati) nel momento in cui ti smette di funzionare puoi verificare lo stato dei filtri e di come devono essere correttamente impostati (come se fosse la prima volta che apri la form)

    Da questa analisi capisci subito cosa va e cosa non va quando resetti i filtri in questione.

    Quindi ti consiglio semplicemente di avviare il debug:

    1. verificare appena aperta la form come sono impostati i filtri che utilizzi
    2. dopo aver cambiato i filtri e quando dici “si blocca il filtro combobox”, con il debug verifica come sono stati resettati i filtri e se i loro valori corrispondono al punto di interruzione debug di cui al punto 1.

    A questo punto trovi la risposta al tuo problema.

    Ciaooo ;-)

  • Re: SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

    03/04/2024 - A.TIRANNA ha scritto:


    • Quanto apro la maschera la situazione è quella che si vede dalla immagine e la combo funziona così come la query sottostante.
    • Se seleziono nei filtri della colonna “cliente” (ma potrebbe essere un'altra qualsiasi colonna) una ragione sociale e poi torno alla situazione iniziale

    Ciao,

    vediamo un attimo di fare ordine nelle cose….

    poniamo di avere :

    1. una Form dove è presente un pulsante (lo chiameremo ComboBoxFilter)
    2. una SubForm in visualizzazione dati 
      1. in origine dati si ha una query 
        1. che sia una query esistente oppure una query creata in designer, non fa differenza
        2. se la query ha una Where Condition impostata oppure no, non fa differenza

    Con ciò si vuole filtrare i records del foglio dati sia con la combobox che con i filtri sulle colonne del foglio dati.


    Per ottenere questo scenario sarà sufficiente impostare le proprietà Filter nell'azioni della combobox : (in questo caso sull'evento Click)

    Private Sub ComboBoxFilter_Click()
    
    Me.TuaSForm.Form.filter =  "TuaField Like '*" & Me.ComboBoxFilter.Text & "*'"
    Me.TuaSForm.Form.FilterOn = True
    
    End Sub

    (In questo esempio si imposta un filtro sul valore di una colonna di tipo string)

    Adesso vediamo operativamente cosa può accadere:

    • Se imposto il filtro da combobox, viene applicato il filtro al foglio dati
    • Se nel foglio dati,su una o più colonne, imposto altri filtri, verranno filtrati i records voluti
    • Se si ritorna ad impostare una nuova ricerca nella combobox, allora viene impostato il filtro come da esempio sopra e andrà a ricoprire (e quindi annulla) i filtri applicati nelle colonne del foglio dati
    • Se nella combobox non si sceglie nulla e si imposta “vuoto”, allora il filtro viene applicato ricoprendo eventuali filtri impostati nelle colonne del foglio dati e si vedranno tutti i records che produce la query impostata in origine dati della subform.

    Quindi non è necessario fare nessuna requery nell'impostare i vari filtri


    Se invece abbiamo la necessità di modificare la where condition della query impostata in origine dati, allora sarà sufficiente eliminare i filtri impostati in precedenza e poi avviare la modifica alla where e quindi eseguire la requery per ricaricare il foglio dati con i nuovi records

    Per esempio:

    Private Sub ComboBoxFilter_Click()
    
    ' reset filter    
    Me.TuaSForm.Form.Filter = ""
    Me.TuaSForm.Form.FilterOn = False
    
    ' modifica query impostando la nuova where condition sulla base del valore ottenuto dalla selezione nella combobox
    ' eseguire la requery 
        
    End Sub

    Se per esempio la combobox restituisce un ID o una Variabile numerica, allora possiamo scrivere una cosa di questo tipo per filtrare tutti i records per una certa condizione  (per esempio potrebbe essere l'Id anno oppure l'anno) :

    Private Sub ComboBoxFilter_Click()
        
    ' reset filter
    Me.TuaSForm.Form.Filter = ""
    Me.TuaSForm.Form.FilterOn = False
    
    ' set recordsource sql select
    Dim stringSql As String
    stringSql = "SELECT ID, intField01, Field02, Field03, Field04, ....... FROM TuaTabella"
    
    ' set recordsource sql where condition
    Dim stringWhere As String
    stringWhere = "WHERE intField01 = " & Me.ComboBoxFilter.Text & ";"
    
    ' set new recordsource
    Me.SFormVerificaFiltri.Form.RecordSource = stringSql & " " & stringWhere
    ' requery
    Me.SFormVerificaFiltri.Form.Requery
    
    End Sub

    In questo caso :

    • si resetta il filter 
    • si prepara la nuova stringa sql per realizzare la nuova query 
    • si imposta, secondo il valore restituito dalla selezione della combobox, la nuova where condition
    • si imposta il nuovo recordsource
    • si esegue la requery per caricare i nuovi records filtrati per la nuova condizione 

    Operativamente si traduce in :

    1. quando si impostano i filtri sulle colonne del foglio dati si fitra il recordsource e si ottengono i records desiderati
    2. se si ritorna alla combobox per selezionare un nuovo item:
      1. viene resettato il filtro impostato nelle colonne del foglio dati
      2. viene ricostruita la nuova query con la nuova where condition
      3. si imposta la nuova query al recordsource del foglio dati
      4. si esegue la requery per ricaricare il foglio dati con le nuove informazioni
    3. si ripete dal punto 1. ecc.ecc.

    Tutto qua… la logica per alcuni scenari possibili è quanto appena descritto. Verifica se hai altre condizioni particolari, … o come where condition, o come filter,  ecc.ecc… e fai sapere.

    Ciaooo…  ;-) 

Devi accedere o registrarti per scrivere nel forum
17 risposte