Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Gestione filtro in maschere collegate

  1. #1
    L'avatar di RaoulDuke
    RaoulDuke non è in linea Scolaretto
    Post
    142
    Like Inviati  
    3
    Like Ricevuti  
    0
    Buongiorno a tutti.

    Nel mio database ho una maschera per la visualizzazione e la ricerca di record. La maschera contiene due sottomaschere tra loro collegate, entrambe maschere continue.

    Ecco uno screen:



    La maschera in alto fa riferimento alla tabella tabPrestazioni, quella in basso alla tabDettegliPrestazioni. Le tabelle sono in relazione uno (prestazioni) a molti (dettagli prestazioni).

    Selezionando un record dalla maschera in alto (evidenziato in rosso), la maschera in basso mostra i record relativi, lato molti.
    Tutto funziona a dovere.

    Ora ho la necessità di gestire dei filtri da parte dell'utente.
    Non ho difficoltà per ciò che riguarda filtri relativi alla prima maschera (ricerca per data, per cliente, ecc).
    Vorrei però aggiungere un filtro particolare, gestito da una casella di testo in cui l'utente digita una stringa.
    Vorrei poi mostrare tutti i record della maschera Prestazioni (lato uno) i cui record collegati nella maschera Dettagli Prestazioni (lato molti) contengano almeno una volta la stringa digitata nel campo "descrizione".

    Faccio un esempio.
    L'utente digita "iniezione". Nella maschera in alto compaiono tutti i record (tutte le prestazioni) per i quali tra i dettagli prestazioni esista almeno una volta un record che nel campo "Descrizione" contenga "iniezione".
    In particolare vorrei che non comparisse solo il record contenente la stringa, ma tutti i record di quella prestazione.

    In sostanza si tratta di cercare tutte le prestazioni in cui si è effettuata un'iniezione. Ogni prestazione selezionata dovrà mostrare tutti i dettagli della prestazione e non solo il dettagli contente "iniezione".

    Ecco, non sono molto in chiaro su come procedere strategicamente.
    Voi come affrontereste il problema?

    Grazie!

  2. #2
    OsvaldoLaviosa ora è in linea Topo di biblioteca
    Post
    3,091
    Like Inviati  
    0
    Like Ricevuti  
    1
    Quote Originariamente inviato da RaoulDuke
    Ecco, non sono molto in chiaro su come procedere strategicamente.
    Voi come affrontereste il problema?
    Io preferisco SEPARARE ciò che è INPUT dati da ciò che è RICERCA. Per l'input che hai creato tu va bene come sta. Per la ricerca io metto in piedi apposite query (magari parametriche) e addirittura maschere (di sola lettura) destinate a tale scopo.
    Se invece hai bisogno di "filtrare" soltanto "qualcosina" per poi mirare sempre sul input...io utilizzo tutti i filtri possibili immaginabili usando i comandi nativi di Access che stanno in alto.
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  3. #3
    L'avatar di RaoulDuke
    RaoulDuke non è in linea Scolaretto
    Post
    142
    Like Inviati  
    3
    Like Ricevuti  
    0
    La maschera che ho mostrato sopra è costruita appositamente per la sola visualizzazione e ricerca dei record. Ne ho un'altra per l'immissione di dati, costruita in modo specifico.

    Questa maschera, con le due sottomaschere, serve unicamente alla ricerca di specifici record tramite l'utilizzo di filtri.
    Il mio problema riguarda la gestione di un filtro per la ricerca di campi che appartengono al lato molti della relazione (dunque alla maschera in basso).

    Ogni record della maschera in alto corrisponde ad una visita di un animale presso il nostro ambulatorio veterinario. Ognuno di questi record è in relazione con molti record della maschera sotto, dove vengono elencati i vari trattamenti subiti.
    Come spiegato prima vorrei selezionare, tramite filtro, solo i record che nel campo "Descrizione" (maschera in basso) contengono almeno una volta una determinata stringa.
    Si tratta dunque di andare a ricercare quelle visite in cui abbiamo effettuato uno specifico trattamento.

    Una soluzione che ho provato ad adottare è aggiungere alla query di origine della maschera in alto, il campo "descrizione". In questo modo il filtro funziona, ma ho record duplicati nella maschera in alto, come si può vedere qui:


    Vorrei poter avere un solo record per ogni visita, ma poter al contempo andare a filtrare il campo "descrizione". Spero di essermi spiegato.

  4. #4
    OsvaldoLaviosa ora è in linea Topo di biblioteca
    Post
    3,091
    Like Inviati  
    0
    Like Ricevuti  
    1
    Devo essere sincero, non ho capito bene bene come funziona il tuo assetto tabelle---->maschere/sottomaschere (non è importante che dai spiegazioni in questo thread). Tuttavia...quando la ricerca "tende" ad essere "complessa", ossia su più steps di tabelle correlate...io trovo più comodo usare le MASCHERE COLLEGATE piuttosto che maschera/sottomaschera.
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  5. #5
    L'avatar di RaoulDuke
    RaoulDuke non è in linea Scolaretto
    Post
    142
    Like Inviati  
    3
    Like Ricevuti  
    0
    tabPrestazioni (lato UNO):
    - IDPrestazione (PK)
    - Data
    - IDCliente
    - DaSaldare (campo sì/no)
    ecc.

    tabDettagliPrestazioni (lato MOLTI):
    - IDDettaglioPrestazione (PK)
    - IDPrestazione (FK)
    - IDProdotto
    - Descrizione
    - PrezzoUnitario
    - Quantità
    ecc

    Nella from di visualizzazione e ricerca record ho due sottomaschere:
    - subfrmPrestazioni: come origine dati ha una query qryPrestazioni con i campi della tabPrestazioni
    - subfrmDettagliPrestazioni: query qryDettagliPrestazioni con i campi della tabDettagliPrestazioni con condizione

    WHERE (tabDettagliPrestazioni.IDPrestazione)=[Maschere]![subfrmNavigationPrestazioni]![subfrmPrestazioni]![IDPrestazione])
    
    In modo tale da collegare le due sottomaschere.
    Sull'evento Current della prima sottomaschera, faccio il requery dell'altra sottomaschera.

    In questo modo ottengo il risultato che ho mostrato nella prima immagine: seleziono un record della prima maschera (lato UNO) e la seconda mostra i record collegati (lato MOLTI).

    Ora:
    Come faccio a far funzionare il filtro di cui parlavo prima? Cioè trovare tutti i record della prima sottomaschera andando a filtrare un campo della seconda sottomaschera/tabella?

    L'unico modo funzionante che ho trovato è aggiungere alla query della prima sottomaschera il campo "Descrizione" della tabella lato MOLTi (il campo su cui voglio far agire il filtro).
    In questo modo riesco effettivamente a far funzionare il filtro, ma ottengo record duplicati se il filtro non è attivo, come mostrato nella seconda immagine.

    Grazie per i vostri suggerimenti

  6. #6
    OsvaldoLaviosa ora è in linea Topo di biblioteca
    Post
    3,091
    Like Inviati  
    0
    Like Ricevuti  
    1
    Per me c'è qualcosa di errato progettualmente nelle query...ma non riesco a capire dove. Non è possibile che in subfrmPrestazioni tu abbia MOLTI record uguali. Hai provato a creare maschera/sottomaschera/sotto-sottomaschera con procedura guidata?
    ℹ️ Leggi di più su OsvaldoLaviosa ...

  7. #7
    Sgrubak non è in linea Scribacchino
    Post
    590
    Like Inviati  
    10
    Like Ricevuti  
    9
    Non sono molto ferrato in Access, ma due idee provo a lasciartele. Hai provato ad usare il DISTINCT nella query?
    In alternativa puoi provare ad annidare una select nella where, ed estrapolare tutti gli id nell'operatore IN che hanno la descrizione che t'interessa.

  8. #8
    L'avatar di RaoulDuke
    RaoulDuke non è in linea Scolaretto
    Post
    142
    Like Inviati  
    3
    Like Ricevuti  
    0
    Quote Originariamente inviato da OsvaldoLaviosa Visualizza il messaggio
    Per me c'è qualcosa di errato progettualmente nelle query...ma non riesco a capire dove. Non è possibile che in subfrmPrestazioni tu abbia MOLTI record uguali. Hai provato a creare maschera/sottomaschera/sotto-sottomaschera con procedura guidata?
    La duplicazione dei record avviene quando aggiungo alla query della prima maschera il campo "Descrizione" della tabella lato MOLTI. E mi pare logico che questo succeda. Devo aggiungere il campo in questione per applicare un filtro su di esso. Se non lo aggiungo, non riesco a filtrare.

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Non sono molto ferrato in Access, ma due idee provo a lasciartele. Hai provato ad usare il DISTINCT nella query?
    In alternativa puoi provare ad annidare una select nella where, ed estrapolare tutti gli id nell'operatore IN che hanno la descrizione che t'interessa.
    Il DISTINCT sì, l'ho provato ma non funziona. Continuo ad ottenere record duplicati per il motivo spiegato sopra. Forse mi sfugge qualcosa di basilare, ma non riesco ad applicare un filtro su un campo che non compare nella query, quindi lo aggiungo e i record si duplicano.
    La seconda tua proposta la devo ancora valutare per bene.

    Un'opzione che penso di tentare è quella di agire tramite vba.
    Recupero tutti le chiave primarie (IDDettaglioPrestazione) dei record contenenti la descrizione che mi interessa (lato MOLTI). Da qui risalgo alle chiave primarie (IDPrestazione) dei record della tabella lato UNO e poi applico il filtro sul campo IDPrestazione con gli ID ottenuti.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. maschere collegate
    Da red_apple nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 07-03-2016, 15:35
  2. Access - cbo collegate in maschere continue
    Da dodo47 nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 23-11-2011, 16:28
  3. MASCHERE COLLEGATE - DefaulValue...
    Da Lindo nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 20-04-2010, 15:14
  4. maschere collegate (che non si collegano...)
    Da Ryger74 nel forum Microsoft Word
    Risposte: 6
    Ultimo Post: 17-02-2010, 22:38
  5. [ACCESS] Maschere collegate (autocomposizione)
    Da wiz@rd nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 03-04-2009, 15:33