SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

di il
17 risposte

SOTTOMASCHERA NON FUNZIONA REQUERY SU CRITERIO COMBOBOX MASCHERA PRINC

Salve

Ho una sottomaschera in visualizzazione foglio dati posizionata all'interno di una maschera principale a schede.

La sottomaschera si basa su una query con due criteri che prendono il dato da due campi posizionati sulla maschera principale (una combo e una text box). Uno dei criteri mi cambia l'anno di visualizzazione e l'altro il mese. Trattasi di un elenco ordini. Tutto bene finchè non applico alla sottomaschera i filtri di ricerca (quelli presenti di default nei campi visualizzazione foglio dati) per trovare, ad esempio, un cliente specifico o anche un importo specifico… Attenzione però… Finchè i filtri sono presenti tutto funziona normalmente... Una volta selezionato “ cancella filtro”  dal campo o dai campi filtrati non funziona più l'aggiornamento della sottomaschera (i cui dati si basano sulla query con criteri nella maschera principale) non riesco più cioè a cambiare visualizzazione record in base a mese o anno. Sembra quasi che la sottomaschera perda i contatti con i campi “criteri” o con la maschera principale. Inutile dire che il .requery che è presente nel codice non funziona anche se VBA sembra eseguire il comando correttamente.

La maschera secondaria non ha collegamenti campo con la maschera principale nella quale sono presenti solo controlli non associati per la selezione record della secondaria.

Ho scoperto poi che:

1 - se lascio un filtro attivo su uno qualsiasi dei campi (ad esempio nel campo ragione sociale defleggo “vuoti” , l'aggiornamento funziona

2 - se chiudo e ricarico maschera e sottomaschera ovviamente tutto torna a funzionare fino al successivo filtraggio.

Non ho trovato alcuna informazione o situazione analoga sul Web. Qualcuno mi sa dare una spiegazione?

allego codice contenuto nella combobox maschera principale evento AfterUpdate:

Private Sub MESE_C_AfterUpdate()

Me.STM_GEST_ORDINI.Requery

End Sub

Grazie mille

17 Risposte

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

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


    Finchè i filtri sono presenti tutto funziona normalmente... Una volta selezionato “ cancella filtro”  dal campo o dai campi filtrati non funziona più l'aggiornamento della sottomaschera

    Ciao,

    Quando fai il cancella filtro quali azioni esegui ? 

    Quando apri la prima volta la form che informazioni hai nella sottomaschera ? 

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

    Per cancellare il filtro: clicco freccetta “filtro” del campo e seleziono opzione “seleziona tutto” oppure opzione “cancella filtro da..” . Ho anche provato ad utilizzare il comando da menù “ordina e filtra” “attiva/disattiva filtro”. Non cambia nulla.

    Quando apro per la prima volta il form nella sottomaschera ho  le informazioni relative ai record del mese e dell'anno corrente. La maschera principale ha due controlli “anno_corso” e “mese_corso” non associati che fungono da caselle di ricerca in quanto presenti come “criteri” nella query sottostante la sottomaschera. Quando apro la maschera principale quei controlli sono settati di default sull'anno in corso e mese in corso e tutto funziona regolarmente. Solo se disattivo i filtri (se li attivo funziona tutto) l'elenco dei record della sottomaschera non viene più aggiornato al cambio mese e anno.

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

    Allego anche SQL Query sottomaschera: 

    SELECT ORDINI.*
    FROM ORDINI
    WHERE (((ORDINI.MESE_FATT)=[Maschere]![CRUSCOTTO]![MESE_C]) AND ((ORDINI.ANNO_1)=[Maschere]![CRUSCOTTO]![ANNO_CORSO]))
    ORDER BY ORDINI.ID;

    Nella Query si fa riferimento ad una tabella “commerciali” che però è irrilevante ai fini del risultato nella sottomaschera.

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

    Le sottomaschere, devono lavorare in sincrono con la maschera principale, quindi nella maschera principale devi avere una fonte dati (tabella o query) che contenga tutti i campi necessari, sia alla maschera principale che alla sottomaschera.
    La sottomaschera deve poi essere collegata tramite campi master con la maschera principale, anche se poi nella maschera principale non hai controlli associati.

    Solo in questo modo avrai un requery su tutto

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

    SELECT ORDINI.*
    FROM ORDINI
    WHERE

          ((ORDINI.MESE_FATT=[Maschere]![CRUSCOTTO]![MESE_C] and  [Maschere]![CRUSCOTTO]![MESE_C] <>'') 

           or

           ([Maschere]![CRUSCOTTO]![MESE_C] =''))

      AND 

          (ORDINI.ANNO_1=[Maschere]![CRUSCOTTO]![ANNO_CORSO])

    ORDER BY ORDINI.ID;

    la combo mese deve avere “”; “Gennaio”; “Febbraio”; … ; “Dicembre”;

    devi mettere la condizione che bypassa la prima istruzione e verifica la or.

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

    Ma se inserisco qu

    27/03/2024 - sihsandrea ha scritto:


    SELECT ORDINI.*
    FROM ORDINI
    WHERE

          ((ORDINI.MESE_FATT=[Maschere]![CRUSCOTTO]![MESE_C] and  [Maschere]![CRUSCOTTO]![MESE_C] <>'') 

           or

           ([Maschere]![CRUSCOTTO]![MESE_C] =''))

      AND 

          (ORDINI.ANNO_1=[Maschere]![CRUSCOTTO]![ANNO_CORSO])

    ORDER BY ORDINI.ID;

    la combo mese deve avere “”; “Gennaio”; “Febbraio”; … ; “Dicembre”;

    devi mettere la condizione che bypassa la prima istruzione e verifica la or.

    Non cambia nulla. Infatti NON CREDO SIA UN PROBLEMA DI QUERY bensì di una specie di “scollegamento” tra la sottomaschera e la maschera principale che avviene solo ed esclusivamente in caso di utilizzo dei filtri nei sottocampi. Non so se è un problema di programmazione o un limite del sistema. Chiedo a voi che siete più esperti. Io ho risolto attraverso un escamotage. Blocco i controlli delle COMBO quando vengono attivati i filtri e li riattivo dopo che ho fatto partire una sub che chiude e riapre la maschera principale. Ma mi sembra “demenziale” anche se l'utente non se ne accorge nemmeno. Forse la ragione sta nel fatto che non ho nella maschera principale alcun collegamento con la sottomaschera come ha scritto “fratac”… ma non mi servono collegamenti nella principale che uso solo come contenitore.

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

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


    ma non mi servono collegamenti nella principale che uso solo come contenitore.

    Usando una query non è necessario collegarsi ad altre tabelle ma basta passare un parametro.

    Quanto all'osservazione:

    Disattivi i controlli e funziona. Beh, non hai osservato la sql che ti ho proposto. La parte or per l'esattezza.

    Se la combo mostra la scritta “tutti” ma potresti anche usare la scritta “filtro non attivato” o ancora “   ”  la sql va letta come se non ci fosse la prima where condition.

    Non l'ho inserto nell'altra condizione (anno) perché volevo lasciare decidere a te se inserire “sempre” “anno corrente” come.default per visualizzare tutti e bypassare la where.

    Se il valore di default è “tutti” nella sql va scritto 

     ((ORDINI.MESE_FATT=[Maschere]![CRUSCOTTO]![MESE_C] and  [Maschere]![CRUSCOTTO]![MESE_C] <>'"tutti")

    Vale a dire che se le due condizioni sono rispettate fa il filtro altrimenti va su or ([Maschere]![CRUSCOTTO]![MESE_C] ='')) quindi nessuna condizione influente ai record da mostrare.

    Un'altra cosa sbagliata usando una sql è l'uso di filtri. Hai una sql basta aggiungere la condizione (un passo verso il modo di operare con un db più serio.

    Adesso una domanda te la faccio io:

    Nell'anno alfa del mese beta cerco la voce %ciao% come fai se hai disattivato le combo? Evidentemente c'è un errore a monte. Le combo si settano non si disabilitano. Per settaggio intendo (a titolo di esempio dei mesi) tutti; trimestri, semestri mesi singoli. Ma non si disabilitano devono convivere.

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

    Forse mi sono spiegata male io ma penso che tu non abbia compreso il problema.

    ho pubblicato le immagini della maschera che da problemi e che fa parte di un applicativo multi utente più ampio che gestisce statistiche sugli ordini/fatturato e calcolo provvigioni già in uso. L'escamotage di cui ho scritto serve solo per evitare che l'utente usi le combo per filtrare (che non funzionerebbero) prima di chiudere e riaprire la maschera principale “CRUSCOTTO” (con il pulsante da me chiamato “NO FILTRI”) che oltre a chiudere e riaprire la maschera “CRUSCOTTO” riattiva le combo.  E' il solo modo che ho trovare per fare ripartire il “requery” basato sui “criteri” delle COMBO sulla sottomaschera. 

    Cerco di rispondere alla tua domanda: i filtri funzionano in quanto sono nella sottomaschera in visualizzazione foglio dati che ha la proprietà filtro=si.

    I controlli “combo” che passano i “criteri” alla query origine record della sottomaschera invece sono nella maschera principale e servono UNICAMENTE a fare in modo che vengano visualizzati nella sottomaschera gli ordini di un mese in un anno determinato (e non possono filtrare campi diversi dal “mese” e dall'"anno". Non devono, in nessun modo, essere visualizzati tutti gli ordini di tutti gli anni, mai. La scelta di posizionare le combo nella maschera principale è stata fatta perchè questa è strutturata con schede che oltre a questa maschera visualizzano altre maschere contenenti statistiche mensili (da qui la necessità che ci siano sempre un mese e un anno selezionati) basate sui dati della sottomaschera STM_GEST_ORDINI (che funge anche da inserimento dati). Le altre maschere avendo la proprietà filtro=no non risentono del problema requery che ha la sottomaschera stm_gest_ordini. 

    Non so se ora mi sono spiegata meglio. Ho provato il tuo codice SQL sostituendolo a quello che avevo inserito io. 

    Prima della attivazione dei filtri residenti nella sottomaschera ottengo lo stesso risultato del mio codice. E anche Dopo, la Query viene eseguita ma la maschera non si aggiorna.  Tu hai inserito un OR ma credo che il problema non sia nella istruzione SQL che viene eseguita dal sistema ma non viene recepita dal recordset della sottomaschera. Il motivo.. non lo so.

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

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


    Non so se ora mi sono spiegata meglio.

    Ciao,

    quando applichi un filtro e successivamente lo rimuovi, la sottomaschera sembra perdere il collegamento con i criteri della maschera principale. 
    A questo punto, per ripristinare la situazione iniziale (ante filtri sottomaschera) ,puoi provare a fare la requery anche della form in modo che riprenda i collegamenti ai filtri dalla Maschera principale  

    Per esempio: Me.STM_GEST_ORDINI.Form.Requery

    Prova a provare ;-)) perchè sembra proprio una sorta di conflitto tra i due filtri in maschera e quelli nelle colonne della sottomaschera.

    Ciaooo ;-)

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

    Ok. In altre parole, ottenuti i record dalla sql appena aggiungi un filtro per il cliente pippo, vedi gli ordini del cliente pippo. Cambi pippo con pluto e vedi pluto, togli il filtro enon vedi più niente?

    La sottomaschera attinge alla stessa query della principale?

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

    Potresti postare il file con un minimo di dati?

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

    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.

    La sottomaschera attinge ad una query ma non è collegata alla principale da dati in comune. Come ho spiegato la principale serve solo da “Contenitore", in quanto maschera a schede, e per selezionare anno e mese.

    Nessuno di voi ha mai avuto un problema simile? Ma credo di aver capito che nemmeno una situazione come quella descritta da me sia stata utilizzata. Sottomaschera in visualizzazione foglio dati (di cui vengono utilizzati i filtri campo) inserita in una maschera principale a schede a cui non è collegata da dati in comune. 

    A me viene il dubbio che ci sia un “conflitto” tra filtri sottomaschera e visualizzazione del recordset della sottomaschera nel caso in cui questa sia nella condizione specifica che ho esposto. Non mi succede ad esempio in caso di Maschera di spostamento con “sottomaschere”. In questo caso l'uso di filtri nei campi non crea problemi con combo per la selezione del periodo (anno o mese). Speravo che qualcuno avesse avuto la mia stessa esperienza e avesse trovato il modo di risolvere.

    Riguardo al requery della sottomaschera era già nel codice fin dall'inizio.

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

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


    Riguardo al requery della sottomaschera era già nel codice fin dall'inizio.

    Ciao, buongiorno… 

    quando vuoi ritornare a rivedere tutto nella subform, come se fosse la prima volta che apri la form e subform, devi ripristinare la situazione iniziale (di inizializzazione), dove potrai nuovamente selezionare per anno e per mese.

    In tal caso si dovrà:

    • eliminare (ripulire) tutti i filtri della subform 
      • sia quelli impostati nelle singole colonne della subform
      • sia quelli impostati e provenienti dalla form
    • quando hai ripulito/eliminato tutti i filtri nel recordset della subform, allora:
      • eseguire la requery della subform
      • reimpostare i  due filtri della form per la subform (se necessario)

    Con questi due semplici passaggi si ritorna ad avere la visualizzazione della subform (come da situazione iniziale) che terrà conto solo dei due filtri passati dalla form alla subform. (quindi come se fosse la prima volta che si apre la form con la sua subform)


    Se non riesci ad ottenere tale risultato, sarà necessario capire se il codice fa qualcosa che non deve fare. Mettere sotto debug il processo e cercare di capire se esistono eventi in altre parti di codice che interfferiscono.


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


    Nessuno di voi ha mai avuto un problema simile? Ma credo di aver capito che nemmeno una situazione come quella descritta da me sia stata utilizzata. Sottomaschera in visualizzazione foglio dati (di cui vengono utilizzati i filtri campo) inserita in una maschera principale a schede a cui non è collegata da dati in comune. 

    Quello che hai realizzato è un processo comune e diffuso.  Nulla di strano avere una Form che non avendo un prorpio recordset, comanda e filtra una SubForm. Non c'è nulla di anomalo rispetto ad una SubForm collegata (sincronizzata) al recordset di una Form con le relative chiavi.

    Quindi… o hai qualche processo che interferisce nel refresh della subform nel momento in cui vengono ripuliti i suio filtri, oppure non vengono correttamente ripuliti i sudetti filtri e le requery e refresh non produco l'effetto desiderato.


    Questa è l'unica analisi per diagnosticare il problema che riscontri… pertanto le cose da fare sono molto semplici:

    1. verificare se i filtri applicati nelle colonne della subform vengono ripuliti/inizializzati a dovere
    2. verificare che non intervangano altre parti di codice che interferiscono in questo flusso di lavoro

    Se una lettura del codice non è sufficiente a capire dove si annida il problema, allora eseguire e seguire passo passo il flusso del codice interessato a tali funzioni. Verificare con il debug i valori dei filtri della subform, come vengono inizializzati, quali eventi e se esistono eventi che si verificano nel processo, ecc.eccc… Non c'è molto altro o cose particolari da fare. ;-)


    Buon lavoro e auguri di buone feste

    Ciaooo ;-)

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

    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. 

    • 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 (sempre quella che si vede nell'immagine selezionando l'opzione “cancella filtro da cliente”) la combo smette di funzionare. Se lascio un solo filtro colonna attivo (ad esempio defleggo il criterio “vuoti” la combo torna a funzionare, se torno alla situazione iniziale dell'immagine, smette nuovamente di funzionare). L'unico modo per ripristinare la situazione INIZIALE è chiudere e riaprire la maschera principale. Sicuramente, in questo modo, “riparte” o si resetta qualcosa che però non capisco cosa sia.  I filtri sottomaschera sono gestiti da Access. Io posso solo decidere di renderli disponibili all'utente oppure no. In questo caso servono. La Query della combobox se fatta partire da sola senza sottomaschera funziona correttamente. 
Devi accedere o registrarti per scrivere nel forum
17 risposte