Query:se in A trovi "x" mi dai il valore del campo B

di il
9 risposte

Query:se in A trovi "x" mi dai il valore del campo B

Salute a tutti.

"Mastico" un po' di Access da anni, da dilettante autodidatta. Ho al mio attivo una decina di programmi, alcuni semplici altri complessi, almeno a mio a parere, e che svolgono degnamente il loro compito (uno mi "gira" da una ventina di anni); ma adopero solo gli elementi "scatola di montaggio" di Access: Tabelle, Query, Maschere (si chiamavano Forme) e Report. Salvo alcune funzioni di filtraggio o calcolo nelle query e/o nelle maschere; non conosco linguaggio di programmazione.

Sto approntando una altro programma e vorrei appoggiarmi alla Vs. esperienza per capire se la "direzione" che mi pare di dover seguire ha una sua validità o se devo cambiarla.

La domanda:
In Visualizzazione Struttura di una query, nel riquadro inferiore si hanno le "colonne" dei campi.
Ipotizziamo di avere , in ordine da sinistra, i campi (o colonne) A, B, C, D ai quali aggiungerò la colonna E.

E' possibile nella colonna E (alias) far visualizzare (copiare) il valore di B, o di C,o di D,(campi di testo e numerici) in funzione del contenuto della colonna A (campo testo)?
ovvero:
nella colonna E: se in A trovi "x" mi fai vedere il valore del campo B, se invece trovi "y" mi fai vedere quello del campo C, se trovi "z" mi fai vedere il valore del campo D.

Mi sembra che la funzione IIf potrebbe aiutarmi, ma non mi pare permetta (o più probabilmente io non ne sono capace) di gestire il valore dei campi.

Visto che il valore di E mi deve andare a finire in un campo di una maschera di stampa, potrebbe essere più facile impostare lì nella maschera qualche formula invece che adoperare la query?

Questo risultato è possibile con i soli elementi "scatola di montaggio" o per forza bisogna ricorrere a stringhe di programmazione?

Grazie per l'attenzione.....
.....e i suggerimenti.

9 Risposte

  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Nella query dopo le colonne relative ai campi [A], [B], [C], [D] aggiungi una nuova colonna con il seguente campo calcolato
    
    E: IIF([A]="x";[B];IIF([A]="y";[C];IIF([A]="z";[D];"")))
    
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Grazie CarlettoFed.
    Per adesso la formula l'ho implementata per il primo campo alias con i campi testo e funziona perfettamente. Devo implementarla anche per altri quattro campi (due numerici), ma ho capito la sintassi. (capito o copiato).
    Grazie di nuovo. Gentilissimo e rapidissimo.

    Ps.: la memoria mi frega: in Access1.0 le Mascherfe non si chiamavano Forme ma Schede.
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Nelle prime tre implementazioni funziona alla grande. Nella quarta invece no.
    Finestra di avviso con : Espressione troppo complessa.

    Nella prima implementazione faccio riferimento a 2 variabili, nella seconda a 3 variabili, nella terza a 12 variabili e nella quarta a 21 variabili.
    La formula del campo calcolato funziona solo fino a 14 variabili (nidificazioni?).

    Domanda:
    Visto che le variabili di riferimento le ho chiamate come il campo che dovrebbero comandarmi:

    Dim1: IIf([D1]="pf";[pf];IIf([D1]="prb";[prb];IIf([D1]="hsb";[hsb]; ....

    esiste qualche altro modo più conciso ( e meno complesso x Access) di esprimere la formula?

    A naso: la direzione alternativa potrebbe essere di dividere il compito in due query e poi accodare i dati in una tabella?

    Grazie per l'attenzione e i suggerimenti..
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Quando hai espressioni sempre più complesse è meglio spezzettarle e parcheggiarle in più colonne (alias). Di conseguenza fai riferimento ai valori parziali di queste ultime.
    Altra alternativa sarebbe quella di usare delle Public Function in un Modulo e far dialogare la query con la Public Function.
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Grazie OsvaldoLaviosa.
    Sul tuo suggerimento dell'ultima riga mi trovo completamente ignorante. ( vedi la mia presentazione all'inizio).
    Su quello precedente capisco qualcosa di più, ma ti sarei grato se mi chiarissi come poi far confluire i campi dei due alias in un campo solo.
    Grazie .
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    1. Si parte da 4 campi A, B, C, D.
    2. E: funz1 che coinvolge A, B.
    3. F: funz2 che coinvolge C, D.
    4. G: funz3 che coinvolge E, F.
    Ho semplificato il discorso, poi, nei dettagli, sai tu quello che devi calcolare nel campo Z, dopo essere passato da R, S, T, X, Y.
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Mi sa che il tuo discorso per me è troppo semplificato, oppure non sono stato capace a spiegarmi.
    L'espressione della quale stiamo parlando, è semplicemente troppo" lunga" per Access, non è complessa, anche se lui ti risponde in quel modo. E' una IIF con "troppe" nidificazioni.
    Io posso ben spezettarla in due, e metterla in due alias diversi, ma poi devo riuscire a far confluire il risultato dei due alias in un campo solo.
    E su questo ho difficoltà.
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Se le condizioni sono molte conviene scrivere una funzione... parametrica.
  • Re: Query:se in A trovi "x" mi dai il valore del campo B

    Risolto! Seguendo le dritte di OsvaldoLaviosa.
    Grazie a tutti.
Devi accedere o registrarti per scrivere nel forum
9 risposte