Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

di il
29 risposte

Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

Ciao a tutti.

Nel DB che sto faticosamente costruendo per la gestione del mio archivio musicale di lirica, sono al punto di dover inserire gli interpreti relativi ad una certa Edizione. Riassumo brevemente la logica adottata.

1. Nella tabella Edizioni raccolgo le informazioni relative alle opere, con tutti i dati, tranne gli interpreti (ossia i cantanti): quindi ho il compositore, il titolo, l’orchestra, il Coro, il Direttore, il M° del Coro, il tipo di registrazione, il luogo e la data di registrazione, la durata dell’opera e il supporto. Naturalmente un’Edizione è un insieme di ID, relativi ai vari elementi che la costituiscono.

2. Una volta inserita un’Edizione, tramite un’altra maschera a maschere continue devo inserire gli interpreti di quella Edizione, prendendo i campi dalla tabella Interpretazioni, strutturata con i campi IDEdizione, IDPersonaggio, IDVoce e IDInterprete. Anche la tabella Interpretazioni conterrà record di soli ID.

Questa logica, benché sia piuttosto contorta, mi ha consentito di procedere e di realizzare quanto volevo. Ma vorrei arrivare a delle maschere che siano chiare anche a chi non potrebbe comprendere il significato di numeri in un oggetto con cui aggiornare i dati; sto quindi cercando di pensare a qualcuno che non sia io, che si accinga a immettere i nomi dei cantanti nella maschera riportata in figura.

InsCantanti.JPG
InsCantanti.JPG

È evidente che il Personaggio 354 dell’edizione 96 il cui timbro di voce è 6, costituisca un’informazione quanto meno criptica (se non frutto di demenza!) per chi non può conoscere cosa c’è sotto.

Alla luce di tutto ciò, sto cercando una soluzione a due problemi:

1. rendere i campi espliciti, ossia Personaggio 354 deve diventare il nome del personaggio il cui ID è 354 nella tabella Personaggi e Voce 6 deve diventare la sigla del timbro il cui ID è 6 nella tabella Voci;
2. nelle caselle combinate della colonna Interprete, anziché elencare per ciascun personaggio tutti i cantanti presenti in archivio, vorrei che comparisse la lista dei soli cantanti con il timbro indicato nella colonna Voce (se la voce è Tenore, solo la lista dei tenori, se Soprano solo la lista dei soprani, e così via).

Per entrambi i problemi, ho tentato delle soluzioni, senza tuttavia trovare nulla di efficace: per il primo punto ho usato una query che mi fornisse i campi desiderati dalle altre tabelle, ma a quel punto la query è diventata non aggiornabile e non ho capito se e come si risolve questa questione. Per il secondo punto, ho provato a filtrare la lista al valore dell’IDVoce, ma non ho saputo poi fare in modo che per ogni riga il filtro si aggiornasse: una volta fatto per il primo personaggio, il filtro rimane, ovviamente, lo stesso per tutti gli altri.

Cosa potete suggerirmi?

29 Risposte

  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Quello che chiedi è sacrosanto anche per gli addetti ai lavori. Devi ottimizzare quei campi con caselle combinate, sia per IDPersonaggio, sia per Voce, sia per IDInterprete. Leggi qui
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    OsvaldoLaviosa ha scritto:


    Quello che chiedi è sacrosanto anche per gli addetti ai lavori. Devi ottimizzare quei campi con caselle combinate, sia per IDPersonaggio, sia per Voce, sia per IDInterprete. Leggi qui
    Le prime 2 concordo... avranno RowSource(Origine Riga) una query fissa con tutti i records... ma per il 3°... siccome nel punto 2 della richiesta lo vuole condizionato da IdVoce... credo sia da pensare ad una soluzione differente... perché non funzionerà...
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Grazie, ragazzi.

    Ho trasformato i campi IDPersonaggio e IDVoce come ha suggerito Osvaldo; per IDInterprete non so se procedere visto ciò che ha detto Alex.

    Però mi chiedo (non ho ancora fatto delle prove per verificarlo): deve cambiare l'origine del controllo nella maschera di inserimento dei cantanti, o rimane IDPersonaggio e IDVoce?
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    La cosa migliore è sempre provare...!
    L'origine Controllo NON DEVE CAMBIARE affatto, mentre devi impostare correttamente l'Origine Riga con la Prima Colonna il Campo IdPersonaggio ed IdVoce a Larghezza=0 e la Seconda colonna deve essere un Calcolato di Concatenazione [Cognome]+[Nome], quindi avrai
    
    SELECT IdPersonaggio, ([Cognome]+[Nome]) As Personaggio
    FROM TabellaAnagrafica
    OrderBy ([Cognome]+[Nome]) As Personaggio
    Stessa cosa per IdVoce....

    Il problema di [IDInterprete] è che il suo predicato SQL sarebbe una cosa simile
    
    SELECT IDInterprete, ([Cognome]+[Nome]) As Interprete
    FROM TabellaAnagrafica
    WHERE IdVoce=Forms!NomeForm!IdVoce
    ORDER BY IDInterprete, ([Cognome]+[Nome]) As Interprete
    Ora, qual'è il problema, che in ogni Records hai o puoi avere un IdVoce diverso, quindi l'elenco restituito dalla Combo, cambiare in relazione al Record Attivo..., la conseguenza è che se quell'IdVoce esclude dall'elenco gli elementi degli altri Records, avrai che la Maschera continua non visualizza i dati, ma non perchè li cancella solo perchè non riesce a ricondurli ad un IdInterprete all'interno del RowSource...
    Quindi io mi muoverei in altro modo... ma Osvaldo magari ha una soluzione dal momento che ha dato il suggerimento.
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Ho fatto la prova... nella maschera di inserimento cantanti, i controlli presentano ancora il valore numerico e non il testo corrispondente...
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Cambia la larghezza delle colonne 0 per la prima e 5 per la seconda
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Ma quindi devo trasformare il controllo nella maschera da casella di testo in casella combinata?
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Mi rispondo da solo: sì, altrimenti vedi solo l'ID che è quello che lavora... giusto?

    Mettiamo il caso, però, che a me non piaccia vedere la casella combinata (un altro utente potrebbe avere la tentazione di aprirla e cambiarmi personaggio, no?): esiste un altro modo per visualizzare il nome? E se usassi DLookUp?
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Donizetti ha scritto:


    Mi rispondo da solo: sì, altrimenti vedi solo l'ID che è quello che lavora... giusto?

    Mettiamo il caso, però, che a me non piaccia vedere la casella combinata (un altro utente potrebbe avere la tentazione di aprirla e cambiarmi personaggio, no?): esiste un altro modo per visualizzare il nome? E se usassi DLookUp?
    Ma la TextBox invece con il Numero non è Editabile...?
    Se la risposta è SI, decidi come vuoi sia fatta la gestione, perchè che sia TextBox che sia Combo basta renderla NON ABILITATA...

    Si può fare tutto, ma purtroppo serve anche avere un minimo di conoscenza, e, se vuoi EDITARE i contenuti la scelta del DlookUp non va bene, se non per il 3° controllo appunto..., per i primi 2 la vedo una cavolata.
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Ma la TextBox invece con il Numero non è Editabile...?
    Se la risposta è SI, decidi come vuoi sia fatta la gestione, perchè che sia TextBox che sia Combo basta renderla NON ABILITATA...
    Non deve essere editabile: deve semplicemente contenere il nome del personaggio dell'opera che in quel momento è in fase di inserimento; non deve essere cambiata, così come anche la voce associata. Il personaggio, con il suo timbro di voce, quello è!

    Posso quindi renderle disabilitate. Ma alla luce del fatto che non devono essere editabili, il DLookUp è proprio sbagliato? Ho capito che rallenta Access, ma tutto sommato...
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Prova ed usa quello che più ti soddisfa, se non deve essere Editato, era una considerazione da sapere subito, non serve nè la ComboBox e nemmeno il DlookUp... basta usare una Query come origine della SubForm in cui metti anche le Tabelle Anagrafica ed aggiungi i Campi [Nome] e [Cognome], facendo attenzione di rendere il tutto NON EDITABILE.
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    per il primo punto ho usato una query che mi fornisse i campi desiderati dalle altre tabelle, ma a quel punto la query è diventata non aggiornabile e non ho capito se e come si risolve questa questione
    Ho provato con la query, come avevo scritto, inserendo la tabella Personaggi (per [Nome]) e Voci (per [SiglaVoce]). Ma mi si è presentato il problema che non potevo più selezionare l’interprete dalla casella combinata, perché la query non era aggiornabile (messaggio che compariva in basso a sinistra della finestra di Access): non so cosa significhi, né se e come si ovvia a questo.
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Scusa, ma fatico a capire..., e forse tu hai molta più confusione di me, vuoi editare o non vuoi editare...?
    Detto questo se hai costruito correttamente le Relazioni con gli Indici deve risultare Editabile, per quello che hai indicato.
  • Re: Visualizzare nomi dei campi, anziché i relativi ID e filtrare caselle combinate

    Scusami tu, forse non mi sono spiegato bene: i due campi NON devono essere editabili e devono contenere rispettivamente il nome del personaggio e la sigla del suo timbro di voce.

    Per far in modo che questo accada, ho detto che ho provato a modificare la query di origine record della maschera: ho inserito la tabella Personaggi (per avere [Nome]) e la tabella Voci (per avere [SiglaVoce]). Perfetto, nei due controlli compare correttamente quello che mi aspetto; ma è sorto il problema che non posso più selezionare l’interprete dalla casella combinata: compare il messaggio (in basso a sinistra della finestra di Access) Recordset non aggiornabile. E non so perché succede (troppe tabelle coinvolte nella query?) e se e come si possa ovviare.
Devi accedere o registrarti per scrivere nel forum
29 risposte