Campo "con aggiornamento automatico" in tabella

di il
18 risposte

Campo "con aggiornamento automatico" in tabella

Salve a tutti,
è il mio primo post e spero di non essere ripetere argomenti già trattati; ho fatto una rapida ricerca e ho letto alcuni thread senza successo.

Faccio una carrellata di informazioni utili:
Ho un database molto semplice che fungeva praticamente solo da "rubrica", a cui adesso sto aggiungendo la "contabilità".
Le tabelle in essere sono le seguenti:
1) Storico_Clienti in cui ci sono tutte le info anagrafiche
2) Pagamenti in cui ci sono tutte le info dei pagamenti con i seguenti campi:
id_pagamento
id_cliente con relazione uno a molti nello storico clienti
data pagamento
Tipologia che prende i valori da una terza tabella "quotepagamenti" che dettaglio in seguito.
Data contabile
Valore nominale
Importo versato
avanzo o disavanzo (calcolato come differenza tra il valore nominale e l'importo versato)
Status con un if che mi restituisce "NON SALDATO" o "SALDATO" in funzione del valore nel campo "avanzo disavanzo"

3) La tabella QuotePagamenti con i campi ID; Tipo; Valore; Frequenza

La domanda è: Riesco tranquillamente a scegliere la tipologia con la ricerca in tipo origine riga "Tabella/query" e di conseguenza ritrovo la cella combinata durante la compilazione, ma chiaramente ogni tipologia ha un importo che è contenuto nella tabella 3 nel campo Valore. Vorrei che il campo "Valore Nominale" della tabella 2 si aggiornasse automaticamente in funzione del valore che contiene il campo Tipologia.

18 Risposte

  • Re: Campo "con aggiornamento automatico" in tabella

    Puoi chiarirmi il significato del campo "Valore nominale"?
    Perdona la mia ignoranza in campo "contabile". Puoi spiegarmi il significato, anche con qualche esempio, dei campi della tabella QuotePagamenti?
  • Re: Campo "con aggiornamento automatico" in tabella

    OsvaldoLaviosa ha scritto:


    Puoi chiarirmi il significato del campo "Valore nominale"?
    Perdona la mia ignoranza in campo "contabile". Puoi spiegarmi il significato, anche con qualche esempio, dei campi della tabella QuotePagamenti?
    Ciao, molto semplice il valore nominale mi rappresenta il prezzo di vendita fissato, la tabella è costruita così:
    id_quotapagamento | Tipo | Valore nominale | Frequenza
    1 | Tipo1 | 100,00€ | Mensile

    Di conseguenza quando seleziono un tipo di pagamento nella tabella Pagamenti, vorrei che il campo "Valore Nominale" prendesse "in automatico" il valore dalla tabella collegata quotepagamenti di cui vedi un esempio sopra.

    Scusa se rispondo dopo parecchie ore
  • Re: Campo "con aggiornamento automatico" in tabella

    Sono ancora confuso. Puoi raccontare 2-3 esempi con 3 Tipo diversi? Se non vedo più casistiche...non riesco ad afferrare...Se usi anche un linguaggio descrittivo piuttosto che tabellare...forse è meglio.

    i am Timoshenko ha scritto:


    Scusa se rispondo dopo parecchie ore
    Nessuno è obbligato a rispondere, nemmeno a farlo in tempi "reali". Ognuno del forum dà il proprio contributo quando vuole e quando può.
  • Re: Campo "con aggiornamento automatico" in tabella

    Ok, il database è stato sempre usato come rubrica per avere uno storico degli alunni della mia scuola.
    Vorrei aggiungere una contabilità a questo db.
    Quindi ho creato una tabella in cui ci sono tutte le quote di iscrizione ed un’altra tabella per registrare chiaramente i pagamenti degli allievi. Ho provveduto a fare una relazione uno a molti tra l’elenco di alunni e la tabella pagamenti così che possa associate più pagamenti ad ogni singolo alunno.
    Quando registro un pagamento ovviamente scelgo un tipo, ovvero “iscrizione, retta mensile, progetto ecc” e questo lo faccio dalla casella combinata che mi si genera comodamente andando a scegliere come tipo di campo “ricerca”. Una volta scelto il tipo dovrei scegliere il valore nominale, scelta inutile in quanto per ogni tipo esiste già questo valore nella tabella “quote_pagamenti”.
  • Re: Campo "con aggiornamento automatico" in tabella

    La teoria spiccia.

    Tabella Ordini
    Tabella DettaglioOrdini
    Tabella Pagamenti
    Tabella TipiPagamento

    Manca la Tabella che lega Ordini a TipiPagamento, che realizza una struttura M-M, che poi userai per popolare la tabella Pagamenti(legata ad Ordini) valorizzando in automatico la Cifra...
    Questa tabella la chiamiamo TipoPagamentoOrdini
    In questa Tabella ci saranno le i campi FK relazionati alle FK delle tabelle lato 1, ed i campi specifici propri dell'Ordine relativi al TipoPagamento.
    Nel tuoi caso il Valore ecomomico €100,00, e la Frequenza, che si intende in Mesi, quindi sarà 1, perchè MENSILE non serve a nulla se non in visualizzazione.
    Q auel punto quando inserirai i dati nelle tue tabelle andrai a recuperare il Valore del Pagamento relativo a quell'ordine mettendo in JOIN la tabella in questione in una Query.
  • Re: Campo "con aggiornamento automatico" in tabella

    Come vorresti gestire il fatto che OGGI il TipoPagamento=Iscrizione ha un ValoreNominale di €100,00, DOMANI sarà €150,00? Ricorda che se vai a scrivere in QuotePagamenti.ValoreNominale=150,00, tale cifra andrà a ripercuotersi per tutti i Pagamenti precedenti...dichiarando il falso.
  • Re: Campo "con aggiornamento automatico" in tabella

    OsvaldoLaviosa ha scritto:


    Come vorresti gestire il fatto che OGGI il TipoPagamento=Iscrizione ha un ValoreNominale di €100,00, DOMANI sarà €150,00? Ricorda che se vai a scrivere in QuotePagamenti.ValoreNominale=150,00, tale cifra andrà a ripercuotersi per tutti i Pagamenti precedenti...dichiarando il falso.
    Teoricamente è legato all'Ordine, contrattuale e non cambia... se cambia si aggiorna nella Tabella specifica il valore ed ovviamente NON modifica i pagamenti pregressi, perchè questi sono i classici dati da memorizzare e non da recuperare, quindi andranno a valorizzazione solo i NUOVI inserimenti come DefaultValue.
  • Re: Campo "con aggiornamento automatico" in tabella

    @Alex ha scritto:


    La teoria spiccia.
    Tabella Ordini
    Tabella DettaglioOrdini
    Tabella Pagamenti
    Tabella TipiPagamento
    Manca la Tabella che lega Ordini a TipiPagamento, che realizza una struttura M-M, che poi userai per popolare la tabella Pagamenti(legata ad Ordini) valorizzando in automatico la Cifra...
    Questa tabella la chiamiamo TipoPagamentoOrdini
    Ciao Alex,
    Magari non avrò capito io qualcosa, ripeto sono un dilettante.
    Credo di aver fatto come dici tu in quanto ho una tabella QuotePagamenti in cui ho il mio prezziario legato alla tabella registro entrate, chiaramente in relazione uno a molti.
    Ripeto tabelle campi e relazioni per chiarezza:
    Tabella 1: StoricoAllievi
    ID; Nominativo; e altri campi che dettagliano l'anagrafica degli allievi.
    Tabella 2: QuotePagamenti
    ID:Tipo;ValoreNominale;Frequenza
    Tabella 3: RegistroEntrate
    ID (chiave primaria);
    ID_allievo (relazione 1 a molti con lo storico allievi);
    DataPagamento;
    Descrizione (Tipo numerico, con relazione uno a molti nella tabella QuotePagamenti);
    ValoreNominale (che vorrei si aggiornasse in automatico in funzione del campo descrizione e che prendesse il valore dal campo collegato nell'altra tabella chiaramente)
    Importo versato;

    Quando scelgo la descrizione nel registro entrate ho impostato il numero di colonne per vedere sia la descrizione che il valore nominale, impostando la lunghezza delle colonne. Il campo successivo da scegliere sarebbe il valore nominale, ma in realtà non c'è nulla da scegliere perchè scelto già nella colonna precedente, vorrei semplicemente si aggiornasse automaticamente col valore che già ha in memoria.

    @Alex ha scritto:


    In questa Tabella ci saranno le i campi FK relazionati alle FK delle tabelle lato 1, ed i campi specifici propri dell'Ordine relativi al TipoPagamento.
    Nel tuoi caso il Valore ecomomico €100,00, e la Frequenza, che si intende in Mesi, quindi sarà 1, perchè MENSILE non serve a nulla se non in visualizzazione.
    Q auel punto quando inserirai i dati nelle tue tabelle andrai a recuperare il Valore del Pagamento relativo a quell'ordine mettendo in JOIN la tabella in questione in una Query.
    Qui perdonami ma davvero non so cosa significhi campi FK...

    Mi sarebbe comodo inserire un'immagine ma non so come si fa qui sul forum...

    OsvaldoLaviosa ha scritto:


    Come vorresti gestire il fatto che OGGI il TipoPagamento=Iscrizione ha un ValoreNominale di €100,00, DOMANI sarà €150,00? Ricorda che se vai a scrivere in QuotePagamenti.ValoreNominale=150,00, tale cifra andrà a ripercuotersi per tutti i Pagamenti precedenti...dichiarando il falso.
    Ciao Osvaldo, in realtà ci ho pensato. Però sono eventualità che possono capitare in anni accademici lontani, quindi magari un mensile per quest'anno sarà 100, l'anno successivo può cambiare (ma non è detto) però pensavo di aggiornare semplicemente il valore nella tabella QuotePagamenti senza eccessive preoccupazioni.

    @Alex ha scritto:



    Teoricamente è legato all'Ordine, contrattuale e non cambia... se cambia si aggiorna nella Tabella specifica il valore ed ovviamente NON modifica i pagamenti pregressi, perchè questi sono i classici dati da memorizzare e non da recuperare, quindi andranno a valorizzazione solo i NUOVI inserimenti come DefaultValue.
    Questo chiaramente mi tranquillizza...

    Grazie a tutti per le risposte, se mi dite come chiarirvi la cosa, magari allegando immagini forse ne veniamo a capo prima.
  • Re: Campo "con aggiornamento automatico" in tabella

    i am Timoshenko ha scritto:


    ValoreNominale (che vorrei si aggiornasse in automatico in funzione del campo descrizione e che prendesse il valore dal campo collegato nell'altra tabella chiaramente)
    ...........
    Quando scelgo la descrizione nel registro entrate ho impostato il numero di colonne per vedere sia la descrizione che il valore nominale, impostando la lunghezza delle colonne. Il campo successivo da scegliere sarebbe il valore nominale, ma in realtà non c'è nulla da scegliere perchè scelto già nella colonna precedente, vorrei semplicemente si aggiornasse automaticamente col valore che già ha in memoria.

    i am Timoshenko ha scritto:


    Ciao Osvaldo, in realtà ci ho pensato. Però sono eventualità che possono capitare in anni accademici lontani, quindi magari un mensile per quest'anno sarà 100, l'anno successivo può cambiare (ma non è detto) però pensavo di aggiornare semplicemente il valore nella tabella QuotePagamenti senza eccessive preoccupazioni.
    A rigore di normalizzazione l'obiezione che ti ho sollevato, ci sta...quindi pensaci bene per il futuro.
    Ora, provo a chiudere un occhio e mi attengo alla tua richiesta "alla lettera".
    Intanto vorrei farti notare che è meglio nominare tutti in campi ID in modo esplicito (IDAllievo, IDTipoPagamento, IDPagamento) e li usi con queste denominazioni sia per la PK=PrimaryKery=ChiavePrimaria, sia per la FK=ForeignKey=ChiaveEsterna.

    In tabella Pagamenti non ti serve il campo ValoreNominale. Usa solo il campo IDTipoPagamento.
    Quello che vuoi realizzare, non si fa con le tabelle, ma lo realizzi in MASCHERA così:
    1. Apri la maschera in visualizzazione struttura
    2. Aggiungi ai campi di Pagamenti una "casella di testo" non associata ad alcun campo
    3. Dentro ci scrivi questa espressione:
    =[IDTipoPagamento].Column(2)
    dando per scontato che la casella combinata IDTipoPagamento ha 3 colonne, di cui la 3a (Column(2)) mostra la colonna ValoreNominale
    4. Salva tutto

    P.S.: Per ritornare al discorso dello "storico", ti conviene avere una tabella Listini con i seguenti campi:
    IDListino (PK)
    AnnoListino (se prevedi di fare cambiamenti a livello di Anni, altrimenti DataListino)
    IDTipoPagamento (FK)
    ImportoNominale

    In tabella Pagamenti, invece di avere IDTipoPagamento, scrivi IDListino (le relazioni a questo punto ovviamente cambiano). Qui dentro ci metti una casella combinata con query che prende campi da entrambe le tabelle TipiPagamenti e Listini. Questa query che sostiene la casella combinata avrà (che so) un filtro sulla Data Max. In questo modo selezioni lo stesso IDTipoPagamento, ma associ l'ImportoNominale solo relativo alla data più recente...e non vai a rovinare la contabilizzazione del passato.
    Fai una copia del database, se non ti fidi di questi suggerimenti, poi prova.
  • Re: Campo "con aggiornamento automatico" in tabella

    Grazie mille Osvaldo, oggi mi metto al lavoro su quanto mi hai detto.
    Non avevo mai usato le maschere perché utilizzo solo io il database e non sentivo la necessità di dargli un aspetto "user friendly", ma se le funzioni che voglio passano per questa strada allora mi tocca percorrerla.

    Ti aggiorno, grazie ancora!
  • Re: Campo "con aggiornamento automatico" in tabella

    OsvaldoLaviosa ha scritto:



    In tabella Pagamenti non ti serve il campo ValoreNominale. Usa solo il campo IDTipoPagamento.
    Quello che vuoi realizzare, non si fa con le tabelle, ma lo realizzi in MASCHERA così:
    1. Apri la maschera in visualizzazione struttura
    2. Aggiungi ai campi di Pagamenti una "casella di testo" non associata ad alcun campo
    3. Dentro ci scrivi questa espressione:
    =[IDTipoPagamento].Column(2)
    dando per scontato che la casella combinata IDTipoPagamento ha 3 colonne, di cui la 3a (Column(2)) mostra la colonna ValoreNominale
    4. Salva tutto
    Ok, questo fatto e funziona egregiamente.
    Tuttavia è sorto un nuovo problema, il valore nominale che volevo in tabella ( che ora posso visualizzare tranquillamente in maschera) mi serviva per calcolare un altro campo, ovvero "Differenza" cioè impostavo un campo calcolato così:
    [ValoreNominale]-[ImportoVersato]
    Chiaramente utilizzavo questo campo per un controllo nel campo "StatoPagamento" in cui utilizzavo la funzione:
    IIf([DIFFERENZA]>0;"DA SALDARE";"SALDATO")

    Adesso posso calcolare in una casella di testo la Differenza ma non so come salvare il risultato nella tabella Pagamenti.

    Spero di essermi spiegato e di non aver confuso il tutto...
  • Re: Campo "con aggiornamento automatico" in tabella

    La nuova casella di testo ha un nome proprio...devi guardare tra le Proprietà, Nome elemento. Immaginando che si chiami TextBox1, devi creare un'altra casella di testo e scriverci dentro:
    =[TextBox1]-[ImportoVersato]
  • Re: Campo "con aggiornamento automatico" in tabella

    OsvaldoLaviosa ha scritto:


    La nuova casella di testo ha un nome proprio...devi gardare tra le Proprietà, Nome elemento. Immaginando che si chiami TextBox1, devi creare un'altra casella di testo e scriverci dentro:
    =[TextBox1]-[ImportoVersato]
    Ciao Osvaldo,
    si questo l'ho fatto, in particolare ho una casella di testo che ho chiamato "CalcoloDifferenza" con dentro il comando "=[Testo10]-[ImportoVersato]" ... il problema è che il risultato di questa operazione non mi viene salvato in tabella, resta visibile solo in maschera.

    Dovrei associare il calcolo di questa casella di testo al campo Differenza in tabella... ma non ho idea di come fare.
  • Re: Campo "con aggiornamento automatico" in tabella

    i am Timoshenko ha scritto:


    il problema è che il risultato di questa operazione non mi viene salvato in tabella, resta visibile solo in maschera.
    I calcoli non devono essere memorizzati in tabella. Le tabelle devono essere solo i contenitori primordiali dei dati digitati dall'utente. Forse ti conviene usare una query con aggiunta di analogo campo di calcolo...poi fai poggiare la tua maschera sulla query.
Devi accedere o registrarti per scrivere nel forum
18 risposte