Aggiornare caselle combinate la seconda in relazione alla prima

di il
10 risposte

Aggiornare caselle combinate la seconda in relazione alla prima

Buongiorno,
sono veramente un neofita di Access e ho avuto la fortuna di imbattermi nel Vostro eccezionale forum.
IO sto costruendo un'applicazione per la gestione clienti del negozio di estetica di mia moglie e nella maschera anagrafica cliente(basata su tabella Clienti per inserirne dei nuovi) vorrei, per comodità che quando scelgo il comune da una CBO (creata nella tabella Comuni) mi vada ad aggiornare un'altra CBO con il Cap (sempre creata nella tabella Comuni) non essendo ancora ferrato sul codice gradirei un aiutino su come fare.
Ho provato ad eseguire AfterUpdate con query in Sql ma niente.
Oppure se possibile eliminare la CBO Cap e mettere solo una casella di testo che si auto compili di conseguenza alla scelta sulla CBO Comuni.
Ditemi Voi se potete qual'è il sistema migliore e come posso fare a realizzarlo.
Vi ringrazio fin d'ora.
Andrea.

10 Risposte

  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Non ho capito... ma se non devi selezionare il CAP la seconda combo non serve...
    Mi piacerebbe capire come è strutturata la tabella Comuni... e quale sarebbe la PK.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Provo a intuire quello che vuoi fare. Generalmente il modo più conveniente di gestire una Anagrafica quando si arriva a compilare i dati relativi al Comune è quello di avere un campo numerico (chiave esterna) IDComune che preleva un valore dalla tabella Comuni. La tabella Comuni dovrebbe avere i seguenti campi:
    IDComune (PK)
    Comune
    CAP
    Provincia
    Regione
    Stato

    In maschera AnagraficaClienti crea una casella combinata sul campo IDComune con queste proprietà:
    Tipo origine riga: Tabella/query
    Origine riga: clicca sul piccolo pulsantino con i 3 puntini all'estrema destra e si aprirà una "visualizzazione struttura query" dove importi la tabella Comuni e trascini nell'ordine tutti i campi che ho elencato prima. In corrispondenza di Comune direi di mettere Ordinamento Crescente. Poi salva.
    Numero colonne: 6
    Larghezza colonne: 0cm;4cm;1cm;1cm;2cm;2cm (la prima deve essere certamente 0 cm)
    Larghezza elenco: 10 cm (il totale di Larghezza colonne)
    Salva tutto

    Questa organizzazione della casella combinata ti assicura che se stai selezionando "Conversano", automaticamente stai memorizzando il suo CAP=70014.

    Spero di essere sulla retta via di quello che vorresti ottenere tu.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    "Andrea G." ha scritto:


    se possibile eliminare la CBO Cap e mettere solo una casella di testo che si auto compili di conseguenza alla scelta sulla CBO Comuni.
    Sicuramente no, in quanto deve essere fruibile, da parte dell'utente, anche l'opportunità di imputare il CAP (tramite apposito controllo). Ciò è motivato qualora si debbano gestire i capoluoghi di provincia principali, i quali hanno più CAP associati allo specifico Comune (per cui sarebbe risolvibile solo accedendo ad uno stradario della città, per discriminare quello corretto).
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Ci sono riuscito così facendo
    CAP = DLookup("CAP", "Tbl_Comuni", "[ID] =" & Forms![Msk_Clienti]!Città.Value)
    Comunque grazie a tutti per le risposte.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Su una situazione del simile ( si parla di comuni, province e regioni) ho adottato questo codice sul controllo "afterupdate" del menù a tendina della maschera, relativo alla selezione del Comune:
    Seleziono il comune, e si popolano anche i campi relativi alla provincia e regione associati
    
    Me.LuogoNascita = Me.CC_LNascita.Column(1)
    Me.ProvNascita = Me.CC_LNascita.Column(2)
    Me.RegioneNascita = Me.CC_LNascita.Column(3)
    
    dove ovviamente la colonna 1, 2 e 3 si riferiscono ai campi della tabella che contiene i dati "geografici", comunque presenti nella casella combinata (CC_LNascita).

    In aderenza alla considerazione di Willy55, per il CAP vale un discorso diverso, o comunque devi lasciare la possibilità di modificarlo singolarmente.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Quello che hai fatto ha una certa coerenza. Sappi che esiste (sulla tua stessa linea logica) una soluzione che credo sia più diretta e immediata.
    1. Fermo restante la progettazione della casella combinata IDComune (mi sa che tu l'hai chiamata [Città])
    2. In visualizzazione struttura maschera potresti aggiungere 3 caselle di testo non associate ad alcun campo, nelle quali vai a impostare la proprietà "Origine controllo" così:
    =[IDComune].Column(2)
    =[IDComune].Column(3)
    =[IDComune].Column(4)
    3. Salva tutto
    Quando vai a selezionare il Comune che ti interessa, le 3 caselle di testo leggeranno automaticamente il contenuto delle altre 3 colonne e lo visualizzeranno senza passare attraverso un evento che le deve compilare.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Si giustissimo.
    Io ho impostato in questo modo perché ho bisogno che i dati rimangano memorizzati nella tabella di anagrafica.
    Mi vengono spesso richieste statistiche di ogni genere, ed avendo pochissima dimestichezza con la programmazione, i dati a "disponibilità immediata" mi fanno ancora molto comodo.
    In futuro, forse, ...
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Robpagna ha scritto:


    Si giustissimo.
    Io ho impostato in questo modo perché ho bisogno che i dati rimangano memorizzati nella tabella di anagrafica.
    Mi vengono spesso richieste statistiche di ogni genere, ed avendo pochissima dimestichezza con la programmazione, i dati a "disponibilità immediata" mi fanno ancora molto comodo.
    In futuro, forse, ...
    Come ha suggerito Osvaldo i dati NON vengono memorizzati nella tabella Anagrafica... ma solo visualizzati nella maschera associata alla tabella anagrafica, con Controli NON ASSOCIATI a campi ma a riferimento, che recuperano i dati dalla ComboBox che Ingloba i dati Relazionati alla ChiaveEsterna nella Tabella Lato Molti in Colonne.

    Tu in questo modo quindi Estrai al solo fine di VISUALIZZAZIONE le Colonne ma non memorizzi NULLA se non il Campo di Relazione, ed i controlli devono NON ESSERE EDITABILI.

    Aggiungo che questo è il modo giusto, se invece tu vai anche a SALVARE i dati realmente, stai facendo un errore decismante importante nella logica corretta di gestione dei dati in quanto stai violando la normalizzazione.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Andrea G. ha scritto:


    Ci sono riuscito così facendo
    CAP = DLookup("CAP", "Tbl_Comuni", "[ID] =" & Forms![Msk_Clienti]!Città.Value)
    Comunque grazie a tutti per le risposte.
    Metodo ERRATO non va bene, la soluzione UNICA e non alternativa, è quella indicata da Osvaldo.
  • Re: Aggiornare caselle combinate la seconda in relazione alla prima

    Da tenere presente che seppure la normalizzazione può essere un aspetto da perseguire, si deve anche valutare se le relazioni esistenti possano rimanere inalterate nel tempo.
    Ad esempio, nel merito alla relazioni fra: Regione -> Provincia -> Comune (ed eventuali dati associati come il CAP) è da considerare che esistono progetti di aggregazione dei comuni italiani fra diverse regioni:
    https://it.wikipedia.org/wiki/Progetti_di_aggregazione_di_comuni_italiani_ad_altra_regione
    e delle modifiche territoriali e amministrative dei comuni d'Italia:

    che possono inficiare i vincoli di integrità referenziale.
    Ne consegue che deve essere valutata la struttura dati più confacente ai propri requisiti, quindi se i dati debbano essere normalizzati o meno.
    Nel caso si opti per quest' ultimo caso si può pensare che l'operazione di associazione avviene solo nella fase di inserimento dei dati (proponendone la scelta in modo aggregato) ma poi memorizzati in forma de-normalizzata al fine di assicurare la, successiva, autonoma gestione (nelle relazioni).
Devi accedere o registrarti per scrivere nel forum
10 risposte