Maschere e Tabelle

di il
24 risposte

Maschere e Tabelle

Faccio seguito ad una discussione simile di qualche anno fa relativa alle maschere e alle tabelle.
http://www.iprogrammatori.it/forum-programmazione/access/inserire-valore-una-maschera-una-tabella-t19366.html
Ho una tabella dei Comuni (tblComuni) con i campi "Comune", "Provincia", "CAP", un'anagrafica clienti (tblAnagraficaPazienti) IDPaziente, ComuneNascita, ProvinciaNascita, ed altri campi non di interesse per questo post. La Maschera AnagraficaPazienti ha un campo cmbComune con i dati da tblComuni "Comune" ed i campi ProvinciaNascita e CAPNascita che sono caselle testo (=[cmbComune].Column(2) e =[cmbComune].Column(3). Tutto funziona bene perchè in automatico dal comune compaiono a cascata CAP e provincia. Ma c'è un problema. I dati ProvinciaNascita e CAPNascita non vengono memorizzati nella tblAnagraficaPazienti e quindi report e maschere successive non riescono a leggerne i valori. Ho provato a fare attenzione alle larghezze delle colonne nel campo cmbComune che sono 0, 2 cm, 2cm, 2cm. Se cambio il primo zero compare l'ID di tbl.comune il menù diventa a tre colonne. Quindi così va bene (con larghezza 0) ma i dati non vengono inseriti in tabella.Dove sbaglio?

24 Risposte

  • Re: Maschere e Tabelle

    ddxrapper ha scritto:


    Ho una tabella dei Comuni (tblComuni) con i campi "Comune", "Provincia", "CAP", un'anagrafica clienti (tblAnagraficaPazienti) IDPaziente, ComuneNascita, ProvinciaNascita
    Se in AnagraficaClienti hai già IDComune (o semplicemente ComuneNascita) il quale dovrebbe portarsi appresso automaticamente anche CAP e Provincia (da Comuni), che necessità hai di compilare più campi in AnagraficaClienti?
  • Re: Maschere e Tabelle

    Non mi sono spiegato bene. Comune si deve portare dietro CAP e Provincia nella tabella in modo che debba essere utilizzato per un report, per esempio. Invece rimane solo nella maschera e la tabella ha il valore "comune" di AnagraficaPazienti ma non quello di CAP e Provincia. Se creo un report o un'altra maschera ovviamente i valori di Provincia o CAP non compaiono perchè non li può derivare da tblComuni.
  • Re: Maschere e Tabelle

    Ciao,
    nel campo "cmbComune" che hai impostato nella proprietà "origine controllo"?
  • Re: Maschere e Tabelle

    Ho sbagliato il nome dei campi. Per essere preciso al massimo. tblComuni Campi(IDComune, Comune, CAP, Provincia), nella tblAnagraficaPazienti IDPaziente, LuogoNascita, ProvinciaNascita. Nella MascheraInserimentoPazienti cmbLuogoNascita, ProvinciaNascita). Origine Controllo cmbLuogoNascita è LuogoNascita
  • Re: Maschere e Tabelle

    Io boccio l'esistenza di un campo ProvinciaNascita nella tblAnagraficaPazienti e di conseguenza anche nella corrispondente maschera. Per me, segui questi passaggi:
    1. Crea una query dove importi la tabella Comuni
    2. Trascina nell'ordine i campi IDComune, Comune, CAP, Provincia
    3. Ordinamento Crescente sul campo Comune
    4. Salva la query con nome ComuniOrdinati
    5. Vai in visualizzazione struttura maschera AnagraficaPazienti
    6. Clicca sul campo cmbLuogoNascita con il mouse destro e scegli Proprietà, scheda Tutte e imposta così:
    Tipo origine controllo: Tabella/query
    Origine controllo: ComuniOrdinati
    Numero colonne: 4
    Larghezza colonne: 0 cm; 5 cm; 2 cm; 1 cm (è importante che la prima colonna sia 0 cm così non si vede, mostrando la prima immediatamente dopo, cioè Comune facilmente digitabile/selezionabile)
    Larghezza elenco: 8 cm (la somma di Larghezza colonne)
    7. Salva tutto
    A livello di maschera tu selezioni il Comune nella cmbLuogoNascita e ti porti appresso automaticamente CAP e Provincia. Il campo ProvinciaNascita non ti serve.

    A livello di report, ti consiglio di costruire una query dove importi entrambe le tabelle AnagraficaPazienti e Comuni e trascini i campi delle tabelle di origine (in particolare CAP e Provincia dalla tabella Comuni) affinchè si vedano esplicitamente. Costruisci poi il tuo report su questa query in modo che hai tutti i tuoi campi facilmente visibili a tua disposizione.
  • Re: Maschere e Tabelle

    Sì certo la tua soluzione è corretta. Ma io preferivo avere i dati disaggregati per poterli gestire separatamente. Se non riesco a gestirli farò come mi spieghi tu in questo tuo post. Ma rimane sempre l'enigma del perchè i dati che derivano da una casella combinata non vanno in tabella.
    Ho provato anche con il codice
    Private Sub
    cmbComuneNascita_AfterUpdate()
    Me!LuogoNascita = Me!cmbLuogoNascita.Column(2)
    End Sub
    Funziona bene ma non memorizza nemmeno in questo caso i valori nei rispettivi campi della tabella. Dove sbaglio?
  • Re: Maschere e Tabelle

    ddxrapper ha scritto:


    io preferivo avere i dati disaggregati per poterli gestire separatamente
    Questo puoi ottenerlo soltanto nella maschera AnagraficaPazienti aggiungendo 2 caselle di testo non associate e scrivendoci dentro le seguenti 2 espressioni:
    = [cmbLuogoNascita].[Column](2)
    = [cmbLuogoNascita].[Column](3)
    la prima si riferisce al CAP, la seconda alla Provincia. In questo modo vedi tali valori.

    ddxrapper ha scritto:


    rimane sempre l'enigma del perchè i dati che derivano da una casella combinata non vanno in tabella
    La tblAnagraficaPazienti è figlia rispetto alla tabella madre tblComuni. In una tabella figlia va scritto soltanto il valore numerico della relazioni uno-a-molti. È giusto che sia così.
  • Re: Maschere e Tabelle

    QUesto vuol dire, scusa la mia ignoranza, che le tabelle vanno messe in relazione? Io pensavo che non dovesse essere così, nel senso che la tblComuni avesse funzione solo come origine dei dati per poi inserirli in tblAnagrafica.Pazienti attraverso la maschera. Almeno questo era quello che volevo fare. Non è così?
  • Re: Maschere e Tabelle

    ddxrapper ha scritto:


    QUesto vuol dire, scusa la mia ignoranza, che le tabelle vanno messe in relazione?
    Pensavo fosse implicito in partenza. Se non lo hai fatto, fallo subito e ricorda di mettere la spunta su "Applica integrità referenziale". Grazie alla relazione, sfrutti al massimo la potenzialità che una casella combinata si porti appresso tutte le informazioni delle altre colonne.
    Lo stesso discorso vale per la query che deve fare da base per il report. Quando importi le tabelle tblAnagraficaPazienti e Comuni, la finestra della struttura query mostra automaticamente la linea di relazione join e, dopo aver trascinato i campi CAP e Provincia, te li visualizzerà correttamente...altrimenti, senza linea di join, sballa tutto.
  • Re: Maschere e Tabelle

    Mannaggia...allora come devo fare? Ho omesso, per non appesantire il messaggio per utilità di tutti, che esistono anche i campi ComuneResidenza e CAPResidenza. Devo creare un nuovo campo IDComuneNascita oltre a ComuneNascita o cancellarlo? Stessa cosa per IDComuneResidenza che devo a questo punto creare, oppure devo trasformare ComuneResidenza in numerico o cancellarlo? Inoltre nella tabella relazione ci devono essere due tblComune con una figlia AnagraficaPazienti? Giusto così?
  • Re: Maschere e Tabelle

    Allora. Ho fatto cosi come mi hai detto. Ho preso tblcomuni, poi tblAngraficaPazienti. Ho tolto ProvinciaNascita, ProvinciaResidenza, CAPResidenza, ho trasformato ComuneNascita in IDComuneNascita e ComuneResidenza in IDComuneResidenza(campi numerici) pensando che il database non debba ripetere gli stessi valori. Quindi se nella tblAngraficapazienti IDComuneResidenza è 456 ne ricava i dati da tblComuni. Ho messo in relazione IDComuniNascita Con ID di tblComuni Poi ho creato una Query: ComuniNascitaOdinati. Ho creato una cmbComuniNascita origine dati la Query ComuniNascitaOrdinati. Tutto funziona per la nascita. Ora per la residenza. E qui nascono i primi problemi. Creare la relazione fra ID di tblComuni con IDComuneResidenza. Infatti nella relazione non è possibile utilizzare una sola volta la tabella Comuni ma bisogni inserirla nelle "relazioni" due volte. E qui il nome di tblComuni diventa tblComuni_1 non modificabile. E sopratutto il meccanismo delle query non funziona per la residenza non funziona. Dove sbaglio?
  • Re: Maschere e Tabelle

    Ho risolto. Ho creato due Query ComuniOrdinatinascita e ComuniOrdinatiResidenza. Poi ho messo le tabelle correlate uno-a-molti dopo aver trasformato le caselle ComuneNascita in IDComuneNascita, stessa cosa per la residenza. Ho cancellato i campi provinciaNascita, ProvinciaResidenza e CAP residenza datiblComuni. Ho creato due casellecombinate e per la privincia ho utilizzato [cmbComuniNAscita].Column (2) e per il CAP [cmbComuniNAscita].Column (3). Stessa cosa per la residenza. Adesso nasce un altro problema: le caselle concatenate da campi combinati. A questo punto apro un altro argomento.
  • Re: Maschere e Tabelle

    Aggiornamento: ho unito le due query in un'unica Query Comuni Ordinati e funziona. Ma il problema dei campi concatenati ancora non trova soluzione.
  • Re: Maschere e Tabelle

    Devo dire che non hai mai elencato esplicitamente tutti i campi di AnagraficaPazienti e soltanto negli ultimi post parli di un campo IDComuneResidenza. Provo a riepilogare quello che ho capito io e quello che penso come dovrebbe funzionare.
    Tu hai 2 tabelle:
    Comuni
    IDComune (contatore, chiave primaria)
    Comune
    CAP
    Provincia

    AnagraficaPazienti
    IDPaziente (contatore, chiave primaria)
    Cognome
    Nome
    Indirizzo
    IDComuneResidenza (numerico)
    DataNascita
    IDComuneNascita (numerico)
    ...altri campi che spero non diventino importanti per discussioni successive...

    In AnagraficaPazienti tu hai 2 volte un campo che "sostanzialmente" dice la stessa cosa "ma non è ridondante" ed è utile alla tua causa, quindi è giusto che stiano lì i campi IDComuneResidenza e IDComuneNascita.
    Quando vai a creare le relazioni, dovrai creare 2 relazioni:
    Comuni.IDComune uno-a-molti con AnagraficaPazienti.IDComuneResidenza
    Comuni.IDComune uno-a-molti con AnagraficaPazienti.IDComuneNascita
    In casi come questi Access fa apparire una domanda dove chiede qualcosa come "una relazione ce l'hai già, vuoi crearne un'altra..."...tu gli dici che ne vuoi creare un'altra e nella finestra Relazioni appare una seconda tabella Comuni_1. Non ti devi preoccupare, si tratta solo di una tabella in più antipatica da vedere, ma Access gestirà ugualmente tutto.

    Assodato questo, non è necessario creare 2 query uguali con nomi diversi. Basta solo una query ComuniOrdinati che potrai utilizzare per entrambe le combo cmbComuneResidenza e cmbComuneNascita.
    Per quanto riguarda la visualizzazione in maschera di CAP e Provincia vale il giochetto della proprietà Column.

    Dopo tutto questo mio riordino di idee, non ho capito perchè parli di un campo concatenato. A cosa ti riferisci?
Devi accedere o registrarti per scrivere nel forum
24 risposte