Casella combinata con ID invece che valore

di il
19 risposte

Casella combinata con ID invece che valore

Ciao a tutti,
Ho una tabella con 4 campi in relazione con altrettante tabelle.
tblAsociazioni: IDAssociazione, Reparto, Categoria, Ciclo, Fase
tblReparti: IDReparto, Reparto
tblCategorie: IDCategoria, Categoria
tblCicli: IDCiclo, Ciclo
tblFasi: IDFase, Fase

E una tabella tblStorico in cui vado a relazionare tramite il campo Associazione, la tblAssociazioni.

Nel momento in cui vado a creare una maschera guidata della tblStorico ed inserisco la cboAssociazioni, mi compaiono gli ID invece che i valori effettivi.



Ho sbagliato qualcosa a livello concettuale?

Grazie

19 Risposte

  • Re: Casella combinata con ID invece che valore

    Leggi questo
  • Re: Casella combinata con ID invece che valore

    Ciao Osvaldo, grazie per il riferimento.

    Da quello che ho capito, praticamente rigiro le tabelle su delle query, e nella tabella in cui mi servono, vado a fare la relazione alle query di riferimento invece che alle tabelle stesse.
  • Re: Casella combinata con ID invece che valore

    Esatto.
    Però, per ortodossia di linguaggio, se dici così

    AndrewTFox ha scritto:


    nella tabella in cui mi servono, vado a fare la relazione alle query di riferimento
    mi fai capire che crei una "relazione" tra query e tabella. Questo non lo devi fare, devi solo dire alla tua casella combinata che vai a prendere i dati dalla query (Origine riga).
  • Re: Casella combinata con ID invece che valore

    Intendevo proprio quello, pardon.

    Immagino che devo effettuare lo stesso procedimento anche nel caso in cui voglio mostrare i dati in un report, giusto?
  • Re: Casella combinata con ID invece che valore

    Report.
    Considera che un report serve solo per mostrare i dati che si suppone andranno ad essere stampati poi su carta. Il report quindi preleva sempre il valore della 1a colonna. In altre parole non ha senso mostrare una "casella combinata" in un report. Se hai bisogno di mostrare anche tutti gli altri valori colonne, meglio predisporre una query con tutti i campi delle tabelle "madri", quindi fai poggiare il report sulla query.
  • Re: Casella combinata con ID invece che valore

    Grazie Osvaldo, sempre prezioso
  • Re: Casella combinata con ID invece che valore

    A furia di provare, mi suscitano un altro paio di domande:

    - Nel campo della tabella su cui voglio creare la casella combinata, devo creare prima la relazione verso la tabella vera e propria e in seguito modificare l'origine riga puntando sulla query creata, giusto? Quindi mi troverò il tipo di dati Numerico (i miei id sono tutti Numerazione automatica).

    - Se questo campo ha un origine riga in cui una delle colonne ha lo stesso "gioco", visualizza l'id invece che il valore, è corretto cosi o bisogna implementare qualcos'altro?

    Lascio un esempio del lavoro per capire meglio:

    CaselleCombinate su Tabelle
  • Re: Casella combinata con ID invece che valore

    AndrewTFox ha scritto:


    - Nel campo della tabella su cui voglio creare la casella combinata, devo creare prima la relazione verso la tabella vera e propria e in seguito modificare l'origine riga puntando sulla query creata, giusto?
    È indifferente se c'è coerenza dati.

    AndrewTFox ha scritto:


    Quindi mi troverò il tipo di dati Numerico (i miei id sono tutti Numerazione automatica).
    Esatto.

    AndrewTFox ha scritto:


    - Se questo campo ha un origine riga in cui una delle colonne ha lo stesso "gioco", visualizza l'id invece che il valore, è corretto cosi o bisogna implementare qualcos'altro?
    Questa è una scelta che hai preferito tu. Ci può stare. Ma la maggior parte dei programmatori sceglie di nascondere la prima colonna (0 cm) perché un valore ID è insignificante per la logica umana che preferisce invece digitare "i primi caratteri testuali" della 2a colonna che di solito è di tipo "testo".

    AndrewTFox ha scritto:


    CaselleCombinate su Tabelle
    Ho dato un'occhiata al database. Nomina i campi ID sempre in maniera esplicita anche per tblReparti e tblStagioni (IDReparto, IDStagione).
  • Re: Casella combinata con ID invece che valore

    OsvaldoLaviosa ha scritto:


    AndrewTFox ha scritto:


    Quindi mi troverò il tipo di dati Numerico (i miei id sono tutti Numerazione automatica).
    Esatto.
    Se invece non creo relazione tra la Utenti e il Reparti, quindi il campo [Utenti].[Reparto] lo imposto con una casella combinata collegandolo alla query [qryUtenti], avrò il campo di tipo "Testo breve".
    Il problema viene quando vado a modificare il valore nella tabella Reparti, non avendo una relazione, i valori corrispondenti già inseriti in [Utenti].[Reparto] non si aggiornano.
  • Re: Casella combinata con ID invece che valore

    I campi chiave primaria e chiave esterna devono essere sempre dello stesso tipo. La prassi vuole che siano sempre di tipo:
    PK: numerazione automatica
    FK: numerico, intero lungo
    Se segui SEMPRE questa prassi non sbaglierai mai.

    I manuali nominano sia PK che FK con lo stesso nome. Quindi nel tuo caso nomina Reparti.IDReparto (PK) e Utenti.IDReparto (FK).
    La relazione in questo caso direi che è d'obbligo o comunque conveniente.

    La caratteristica/potenza della casella combinata sta nel collegare/tenere presente sempre la 1a colonna (numerico) come appoggio (proprietà Colonna associata: 1). Poi, per il motivo che ti dicevo prima della comodità umano/visiva, si preferisce mostrare la 2a colonna (testo) con il giochetto di Larghezza colonne: 0 cm; 3 cm.
  • Re: Casella combinata con ID invece che valore

    Ciao Osvaldo, porta pazienza..
    sono sicuro di aver seguito tutte le indicazioni che mi hai dato, ma arrivo ad un certo livello in cui continua a restituirmi gli ID invece che il testo.

    E' più facile da vedere che da spiegare, quindi ti allego il file e provo a spiegare:
    In questo caso sono bloccato nella tblAvanzamenti, dove la casella combinata IDAssociazione mi visualizza esclusivamente gli ID nonostante abbia seguito le istruzioni.


    A sua volta, la tblAssociazioni, ha delle caselle combinate gestite alla stessa maniera:


    Cosa mi sfugge questa volta?

    CaselleCombinateID
  • Re: Casella combinata con ID invece che valore

    La casella combinata si usa solo per le FK. È un errore madornale mettere una casella combinata in una PK (tblAssociazioni.IDAssociazione).
    In tblAvanzamenti.IDAssociazione trovo curioso che tu metta 5 colonne per visualizzare poi la 5a. Cosa ci sta dentro la 5a colonna? Ripeto, di solito si visualizza la 2a colonna. Ti consiglio anche di fare in modo che Larghezza elenco sia esattamente la somma di Larghezza colonne.
  • Re: Casella combinata con ID invece che valore

    Ciao Osvaldo,
    nel caso della tblAvanzamenti.IDAssociazione la uso per fare un filtro a cascata, ovvero in base ai valori delle prime 4 colonne (che vengono filtrati sulla query da delle variabili), mi viene restituita la lista di valori validi associati della 5a.

    A questo punto, correggimi se sbaglio, tblAssociazioni.IDAssociazione diventa la PK rispetto a tblAvanzamenti.IDAssociazione no?
    Quindi questo metodo per creare una casella combinata, non può superare i "2 livelli"
  • Re: Casella combinata con ID invece che valore

    Parli di filtri a cascata, ma non è chiaro come, se non dici tutti i nomi propri.

    AndrewTFox ha scritto:


    A questo punto, correggimi se sbaglio, tblAssociazioni.IDAssociazione diventa la PK rispetto a tblAvanzamenti.IDAssociazione no?
    Non esiste il concetto di "diventa PK".
    tblAssociazioni.IDAssociazione è la PK della tabella tblAssociazioni: stop!
    tblAvanzamenti.IDAssociazione è FK.
    I manuali dicono che PK e FK possono avere lo stesso nome, ciò fa parte del "buon senso", "comprensione"...chiamalo come vuoi. Possono essere chiamate anche diversamente. I pignoli preferiscono chiamarle ad esempio rispettivamente PKAssociazione e FKAssociazione così sono sicuri al 100% che non ci sarà mai ambiguità.
    Una PK è una "chiave primaria", è UNIVOCA, per questo motivo sta dal lato UNO della relazione uno-a-molti.
    La FK è una "chiave esterna" (ForeignKey). È un valore che può e "deve" essere RIPETUTO, per questo si trova dal lato MOLTI della relazione uno-a-molti.

    AndrewTFox ha scritto:


    Quindi questo metodo per creare una casella combinata, non può superare i "2 livelli"
    Non è vero. Una casella combinata può avere come Origine riga una query. Nella query tu puoi metterci tutti i livelli di tabelle che vuoi, quindi anche i rispettivi campi.
    Mo tu hai "aleggiato" anche i termini (correggimi se sbaglio) di "caselle combinate a cascata". In questo caso è ovvio che conviene giocare a pezzetti a 2 a 2. Per avere una idea completa del meccanismo "caselle combinate a cascata" leggi qui
Devi accedere o registrarti per scrivere nel forum
19 risposte