Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Campi con formule

  1. #1

    Campi con formule

    Ciao a tutti.
    In una maschera, ho inserito una formula (somma) in una casella di testo collegata ad una tabella.
    Mettendo la formula nell'origine controllo mi sono però accorto che la relativa tabella non si aggiorna.
    Come fare?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    Re: Campi con formule

    Originariamente inviato da Pegasus_75
    Mettendo la formula nell'origine controllo mi sono però accorto che la relativa tabella non si aggiorna
    C'e qualcosa che non va,
    è proprio nell'origine controllo che tu definisci il legame fra la casella di testo
    e il campo della tabella.
    Se ci scrivi una formula ( cosa lecita ) spezzi quel legame pertanto
    non aggiorni la tabella


    __________________________________________________ ___________

    Se tu vuoi che il risultato di una formula venga scritto in tabella
    hai altri modi:


    __________Primo___________
    Lascia l'origine controllo sul campo interessato
    ___usa poi il " valore predefinito " ( poco piu in basso )
    li scrivi la formula

    All'apertura della maschera vedi gia il campo PRECOMPILATO
    con il valore che ti interessa

    Il punto debole e che i valori devono gia essere nel DB prima della
    apertura della maschere
    ad esempio now() o la somma di valori su record gia completi

    NON POSSONO essere valori che tu devi ancora digitare
    in maschera appunto perche gia PRECPMPILATO all'apertura


    __________Secondo___________
    Se la formula da calcolare dipende da valori che devi digitare in
    maschera allora devi creare un evento che scrive nel
    controllo il valore della formula


    Se per esempio hai una casella di nome "Totale" con origine controllo
    il campo "Totale"
    Hai altre 2 caselle di testo "Testo5" e "Testo7" non associate
    con formato numerico standard

    Nel codice della maschera scrivi
    codice:
    Private Sub Testo5_AfterUpdate()
    Me.Totale = Nz(Me.Testo5, 0) + Nz(Me.Testo7, 0)
    End Sub
    Vedrai che ogni volta che modifichi Testo5 ti si aggiorna il totale





    Saluti

  3. #3
    Ciao nman e grazie per la risposta.
    Il secondo modo è quello che più si avvicina alle mie esigenze.
    L'ho provato, ma non funziona benissimo...
    Ho creato una maschera "M_Articoli", collegata alla relativa tabella "T_Articoli".
    All'interno della maschera "M_Articoli" ho inserito una sottomaschera "M_Carico", dove inserisco tutte le operazioni di carico dell'articolo in questione.
    Nella sottomaschera "M_Carico" ho inserito il campo "SubtotaleCarico" che mi calcola la somma delle "Quantità" --> =Somma([Quantita]).
    Nella maschera "M_Articoli" ho un campo chiamato "Carico" originariamente collegato alla tabella "T_Articoli", dove ho inserito una formula per copiare il valore calcolato nel campo "SubtotaleCarico" --> =M_Carico!SubtotaleCarico.
    Fin qui tutto funziona!
    L'unico problema è che nella tabella "T_Articoli", il campo "Carico" resta sempre a 0.
    Ciò dipende dal fatto che nel campo "Carico" della maschera "M_Articoli" l'origine controllo non è "Carico" ma è stata sostituita dalla formula =M_Carico!SubtotaleCarico.

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Non funziona perche hai dentro la sottomaschera
    E meglio ricominciare daccapo magari apri un nuovo file
    e mettici dentro queste due cosette

    Immaginiamo che hai:

    Tabella "T_Articoli" con i campi:
    __ ID_Art Key Contatore
    __ Articolo Testo
    __ Carico Numerico

    Tabella "T_Carico" con i campi
    __ ID_Car Key Contatore
    __ Rif_ID_Art Numerico ( Il riferimento alla ID_Art )
    __ Quantita Numerico ( scritto senza accento sulla a )


    Maschera "M_Articoli" associata a "T_Articoli"
    Contenente i 3 controlli
    __ ID_Art
    __ Articolo
    __ Carico
    ( Il "Nome elemento" fallo corrispondere sempre alla "Origine controllo" )
    NON INSERIRE NESSUNA FORMULA NEI CONTROLLI


    Maschera "M_Carico" associata a "T_Carico"
    Contenente i 3 controlli
    __ ID_Car
    __ Rif_ID_Art
    __ Quantita
    ( Il "Nome elemento" fallo corrispondere sempre alla "Origine controllo" )
    IL CAMPO "SubTotaleCarico" CHE CITI NON TI SERVE

    __________________________________________________ _______________


    La maschera "M_Carico" è inserita come sottomaschera
    in "M_Articoli"

    Il nome della sottomaschera è ancora "M_Carico"

    Le due sono legate dai campi:
    _____ M_Articoli!ID_Art
    _____ M_Carico!Rif_ID_Art


    __________________________________________________ ______________

    Nel codice VBA della sottomaschera "M_Carico" scrivi quanto segue
    e otterrai che ad ogni modifica del campo Quantita VBA
    si occupera di scriverti in maschera al campo Carico
    la somma del singolo articolo e verra poi registrato in tabella

    codice:
    Private Sub Quantita_AfterUpdate()
    ' dopo la modifica del campo quantita
    
    
    ' innanzitutto registra quanto in maschera nella tabella sottostante
        DoCmd.RunCommand acCmdSaveRecord
        
        
    ' Dopo imposta il campo Carico  ( Forms!M_Articoli!Carico )
    ' al valore di  DSum("[Quantita]", "T_Carico", "Rif_ID_Art=Forms!M_Articoli!ID_Art")
    '    Somma Quantita
    '    nella tabella  T_Carico
    '    WHERE  "Rif_ID_Art=Forms!M_Articoli!ID_Art"
        Forms!M_Articoli!Carico = DSum("[Quantita]", "T_Carico", "Rif_ID_Art=Forms!M_Articoli!ID_Art")
    End Sub
    __________________________________________________ _____________



    Dovrebbe funzionare al primo colpo

    Saluti

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Premesso che con quanto detto sopra ti manca da gestire
    la eliminazione dei record nella sottomaschera
    __________________________________________________


    Permettimi una osservazione

    Tu hai nella tabella T_Carico le singole quantita
    e vuoi registrare nella tabella T_Articoli al somma delle singole quantita

    Questa struttura è sconsigliabile perche si tratta
    dei cosidetti " dati rindondanti "
    tu in effetti scrivi 2 volte la stessa cosa e rischi di sbagliare

    Se mantieni solo le singole quantita puoi sempre nella applicazione
    calcolarti il totale senza scriverlo in tabella

    __________________________________________________ ___


    Solo su DB MOLTO grossi dove le eventuali somme impiegherebbero
    piu secondi si preferisce registrare la somma in tabella



    Saluti

  6. #6
    Grazie nman per i suggerimenti e scusa se non ti ho risposto prima, ma apro il PC solo il w-end.
    Il codice funziona perfettamente.
    Grazie ancora.

  7. #7
    Scusami nman, ma mi sono accorto solo ora che cancellando un valore in "quantità" la somma in "carico" non cambia.
    C'è una soluzione?
    Grazie

  8. #8
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da nman
    Premesso che con quanto detto sopra ti manca da gestire
    la eliminazione dei record nella sottomaschera
    3 post fà ti avevo detto che mancava
    la gestione delle eliminazioni

    __________________________________________________ __


    Sotto il codice che ti ho gia mandato aggiungi quest'altro

    codice:
    Private Sub Form_AfterDelConfirm(Status As Integer)
    '   Dopo conferma eliminazione
    
    
    'La riga che ti interessa è sostanzialmente questa
    'Dice di scrivere in  "Forms!M_Articoli!Carico" la somma delle quantita nella tabella "T_Carico"
        Forms!M_Articoli!Carico = DSum("[Quantita]", "T_Carico", "Rif_ID_Art=Forms!M_Articoli!ID_Art")
        
    End Sub

    Saluti

  9. #9
    Grazie nman
    mi sei stato davvero utile e scusa la mia ottusità

    Ciao

  10. #10
    ok...ora ho un altro problema:
    nella tabella T_Articoli, ho il campo "Giacenza" che è la differenza tra i campi "Carico" e "Scarico".
    Avrei bisogno di un codice che all'aggiornarsi dei campi "Carico" e "Scarico", mi calcoli in automatico la differenza e la aggiorni nel campo "Giacenza".
    Ho creato una query che lo fa, ma non so come legare il risultato alla maschera e di conseguenza alla relativa tabella.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.