+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Creare filtri su maschera attraverso pulsanti e combobox

  1. #1
    Massimo_914 non è in linea Novello
    Post
    12

    Creare filtri su maschera attraverso pulsanti e combobox

    Buongiorno a tutti e grazie anticipate per l'aiuto che vorrete darmi.

    Lo stato dell'arte:
    Ho un DB che ho realizzato per l'ufficio che contiene nello specifico la query Q_AggregazioneBase, formata da un'altra query e da una tabelle che di seguito specificate:
    1) Q_AnagraficaPrj (query)
    a) IDCliente
    b) DataFirmaPrJ
    c) DataCollaudoPrj
    d) AvanzamentoPjt
    e) RifProgramManager
    2) ElencoPM
    f) IDProgramManager
    g) Gruppo
    Il collegamento tra la query e la tabella avviene tra i campi un grassetto.

    La richiesta:
    Vorrei creare una maschera che contenga una serie di oggetti (pulsanti, combobox) che permettano di filtrare
    la query Q_AggregazioneBase a cui collegare dei grafici.
    Per fare un esempio i campi soggeti a filtr dovrebbero essere:

    h) quantità di record (progetti) entrati per trimestre
    i) quantità di record (progetti) collaudati per trimestre
    l) quantità di record (progetti) aggregati per stato
    m) quantità di record (progetti) aggregati per Area geografica (NordEst,NordOvest, Centro, Sud)

    N.B. I pulsanti e le cmbo dobvrebbero essere utlizzabili anche in combinazione tra loro per ottenere dei filtri con più condizioni ed avere un tasto di reset per l'azzeramento dei filtri stessi.

    Mi rendo conto che è una richista piuttosto elaborata ma potrei accontentarmi anche solo di un istradamento iniziale per la creazione di un singolo oggetto.

    Grazie a tutti e saluti
    Ultima modifica di AntonioG; 04-09-2018 17:27 

  2. #2
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Luogo
    Conversano
    Post
    3,026
    Io non sono sicuro di aver compreso il problema nei dettagli (che pare tu abbia esposto). Pare che @Alex ha un demo al riguardo con una serie di pulsanti e varie opzioni AND, OR, NOT, ecc... (mi si corregga se sbaglio). Il marchingegno che c'è sotto è veramente molto complicato (io non ne sono mai venuto a capo). Ricordo di essermi abbarbicato anch'io nel tentare di progettare qualcosa di simile. Molto tempo dopo me ne pentii e ritenni più "sano" progettare qualcosa che filtrasse/ricercasse per "più steps" con più maschere e possibilmente che sfruttasse la filtrazione "mono-valore" attraverso i campi chiave ID.
    Non so se sono stato pertinente e/o comprensibile. Magari attendi risposta da un utente più esperto.

    P.S.: Hai preso in considerazione la possibilità di sfruttare il "filtro in base a maschera"?
    Ditemi i campi di tutte le vostre tabelle.

  3. #3
    Massimo_914 non è in linea Novello
    Post
    12
    Prima di tutto ti ringrazio per la sollecita risposta.
    Per quanto riguarda l'uso del filtro in base maschera, dato che il mio sarebbe quasi uno strumento aziendale, lo troverei un po' troppo grossolano.

    Magari vediamo se @Alex ci risponde. Comunque se ti dovesse venire qualche nuova idea oppure ritieni che debba meglio spiegare la mia richiesta non esitare a farmenlo sapere.

    N.B. Io avevo pensato che la query Q_AggregazioneBas potesse avere qualche campo aggiuntivo (uno per ogni possibile valore di scelta) in cui inserire i vari valori provenienti dalle scelte fatte con pulsanti e combo, tutti collegati quindi in AND, ma non sono riuscito a capire come fare a mandare i valori dagli oggetti (pulsanti e combo) ai campi aggiuntivi della query

    Un saluto

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,549
    Non è affatto una richiesta elaborata... anzi credo sia normale.
    L'opzione di usare il filtro in base a maschera è come già detto più volte non ad uso distribuito, ma fruibile solo se chi sviluppa è anche l'utilizzatore..., però è pur sempre uno strumento.
    Chi programma applicativi ovviamente non lo usa.

    Detto questo predisporre un sistema di Filtraggio è una cosa abbastanza semplice, relativamente alla conoscenza.

    Tu parli di filtrare una Query... e su questo io vorrei tu invece riflettessi... perchè filtrare la Query è meno comodo che filtrare i dati visualizzati.

    Questo DEMO ad esempio potrebbe essere una base di partenza, non è affatto banale:
    Maschera FILTRI

    In ogni caso semplificando, predisponi le tue N combobox nella Maschera principale, ovviamente sono COMBO NON ASSOCIATE, ma che popoli con i dati che ritieni adatti.
    A questo punto devi solo ricostuire la Stringa di Filtro da passare alla Maschera da Filtrare, e lo puoi fare con pochissime righe di codice...
    codice:
    Dim strWH As String
    If Len(Me!cboFiltroCampo1.Value & vbNullString) > 0 Then strWH = strWH & "IDCampo1=" & Me!cboFiltroCampo1.Value & " AND "
    If Len(Me!cboFiltroCampo2.Value & vbNullString) > 0 Then strWH = strWH & "IDCampo2=" & Me!cboFiltroCampo2.Value & " AND "
    If Len(Me!cboFiltroCampo3.Value & vbNullString) > 0 Then strWH = strWH & "IDCampo3=" & Me!cboFiltroCampo3.Value & " AND "
    ' se ne hai 45... aggiungi 45 righe... ed ovviamente 45 Combo nella Maschera...
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    Me.Filter = strWH
    Me.FilterOn = True
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  5. #5
    Massimo_914 non è in linea Novello
    Post
    12
    Ciao Alex e grazie per la tua risposta.
    Mi dovrai scusare se i dubbi che mi rimangono sono banali ma io sono un novello programmatore.

    1) nella predisposizione della variabile strWH
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    perché utilizzi il -5 finale?

    2) La variabile strWH, applicata alla maschera corrente su cui sono le combo con
    Me.Filter = strWH
    agisce anche sulla sottomaschera che contiene l'elenco dei record totali che dovrebbero essere visualizzati?

    3) La cosa funziona anche se la sottomaschera con i record totali è Hidden?


    Scusa per l'ignoranza
    saluti
    Massimo

  6. #6
    Massimo_914 non è in linea Novello
    Post
    12
    Scusa per la domanda 2,
    forse ho detto una stupidaggine perchè le combo possono essere messe sulla stessa form in cui ci sono i record totali

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,549
    Quote Originariamente inviato da Massimo_914 Visualizza il messaggio
    Ciao Alex e grazie per la tua risposta.
    Mi dovrai scusare se i dubbi che mi rimangono sono banali ma io sono un novello programmatore.

    1) nella predisposizione della variabile strWH
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    perché utilizzi il -5 finale?
    Dovresti fare DEBUG del codice in modo da appropriarti di tecniche per la diagnostica.
    Puoi trovare qui un Tutorial:[Access] DEBUG

    Il motivo del 5 è dovuto alla composizione della stringa, se tu la leggessi come contenuto nella Finestra delle Variabili ti accorgeresti che è sempre terminata da " AND ", e questo lo dice anche il codice:
    codice:
    If Len(Me!cboFiltroCampo3.Value & vbNullString) > 0 Then strWH = strWH & "IDCampo3=" & Me!cboFiltroCampo3.Value & " AND "
    Quindi prima di usare il Criterio, ancorchè sia solo 1, devi rimuovere sempre l'ultimo pezzo.
    Questo è un modo di scrivere codice più snello... si potevano fare controlli a monte ma così anche la lettura è pulita.

    Quote Originariamente inviato da Massimo_914 Visualizza il messaggio
    2) La variabile strWH, applicata alla maschera corrente su cui sono le combo con
    Me.Filter = strWH
    agisce anche sulla sottomaschera che contiene l'elenco dei record totali che dovrebbero essere visualizzati?
    Fai attenzione, la risposta semplice è SI, ma in realtà ti direi una cavolata dal punto di vista Tecnico.
    Il Criterio, quindi il Filtro agisce SOLO sulla FORM, ma ovviamente i dati nella SUBFORM sono legati a quelli della Form in quanto insistono su una Relazione 1-Molti applicata dalle proprietà Campi Master/Secondari che realizza la tipologia Master/Detail, di conseguenza se lato 1 ESCLUDI dei RECORDS con il Filtro, è evidente che nella SubForm non vedi quelli relazionati a quelli esclusi.

    Quote Originariamente inviato da Massimo_914 Visualizza il messaggio
    3) La cosa funziona anche se la sottomaschera con i record totali è Hidden?
    La proprietà è VISIBLE, non Hidden, ma, anche se è VISIBLE=FALSE(Hidden) i dati continuano ad essere Relazionati, quindi il legame dei Record viene mantenuto, e l'applicazione del Criterio anche.

    Quote Originariamente inviato da Massimo_914 Visualizza il messaggio
    ...
    saluti
    Massimo
    Saluti
    Ultima modifica di @Alex; 07-09-2018 12:29 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi