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
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
C'e qualcosa che non va,Originariamente inviato da Pegasus_75
Mettendo la formula nell'origine controllo mi sono però accorto che la relativa tabella non si aggiorna
è 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
Vedrai che ogni volta che modifichi Testo5 ti si aggiorna il totalecodice:Private Sub Testo5_AfterUpdate() Me.Totale = Nz(Me.Testo5, 0) + Nz(Me.Testo7, 0) End Sub
Saluti
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.
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
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
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.
Scusami nman, ma mi sono accorto solo ora che cancellando un valore in "quantità" la somma in "carico" non cambia.
C'è una soluzione?
Grazie
3 post fà ti avevo detto che mancavaOriginariamente inviato da nman
Premesso che con quanto detto sopra ti manca da gestire
la eliminazione dei record nella sottomaschera
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
Grazie nman
mi sei stato davvero utile e scusa la mia ottusità
Ciao
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.