Newsgroup: it.comp.appl.access
Titolo: Campo calcolato nella tabella

Ho una maschera basata su una query.
La query ha un campo calcolato; quando visualizzo la maschera, immetto i
vari paramentri e, sempre nella maschera mi appare il risultato (che prende
dalla query).
Come faccio a "riversare" nella tabella il risultato ad ogni nuovo recor che
compilo?
C'è un modo con VBA o con qualche espressione o lo devo fare per forza di
cose con una query di aggiornamento, che però mi complicherebbe la vita?
Grazie
--
A presto!
Donato Mazzocchetti
ark...@tin.it


Sei sicuro che č necessario memorizzare in una tabella i risultati di un
calcolo?
Il risultati di un calcolo sono una informazione, le tabelle dovrebbero
invece contenere solo dei dati che al limite possono rappresentare gli
argomenti del calcolo. Cosa succede se da un altro oggetto del database,
oltre che dalla tua maschera, devi modificare uno dei dati che servono a
fare il calcolo? Dovresti preoccuparti di aggiornare di conseguenza anche il
campo che contiene il risultato del calcolo. Se il calcolo si ripete in
oggetti diversi del tuo DB, effettualo richiamando una routine memorizzata
in un modulo, quindi richiamalo tutte le volte che ne hai bisogno da
maschere, query e report.
Comunque, prescindendo dall'ortodossia dell'architettura del tuo DB, il
calcolo non lo effettuerei nella query, e se la query l'hai creata solamente
per effettuare il calcolo in questione, la eliminerei. Mi dichiarerei invece
nella maschera una casella di testo associata al campo della tabella dove
vuoi "riversare" il risultato del calcolo (o, se hai deciso di mantenere la
query, associata al campo della query che a sua volta fa riferimento al
campo della tabella); quindi, a fronte dell'evento "Su attivato" di detto
controllo della maschera, genererei un codice VBA che contenga il tuo
calcolo.
Roberto

E' meglio mettere un richiamo alla routine di ricalcolo su ogni evento
DopoAggiornamento di ciascuna casella che contiene un dato implicato nel
calcolo, altrimenti c'è il rischio che venga modificato uno degli operandi
senza avere l'aggiornamento del risultato.

 wrote in message
1Jt45.261386$VM3.2...@news.infostrada.it...

Visto però che il calcolo è meglio effettuarlo solo quando tutti i dati del
calcolo sono stati digitati, non è meglio richiamre la routine solamente
sull'evento Prima di aggiornare della maschera?
Roberto

 >Roberto
Grazie per l'aiuto!


 wrote in message
395322B9...@ponziosud.it...

Se le cose stanno così, è innegabile che la soluzione giusta è quella che ti
ha dato Sirio, ovvero il calcolo va effettuato a fronte dell'evento "Dopo
aggiornamento" di tutti i controlli che partecipano al calcolo; quindi, se è
necessario, quando ti sposti sul campo in questione, puoi digitarci sopra il
peso del materiale, ricoprendo così il risultato del calcolo.
Ipotizzando che nella tua maschera ci siano dei controlli chiamati Altezza,
Larghezza, Spessore, PesoSpecifico e Peso, devi:
1) Aprire la struttura della tua maschera
2) Evidenziare il controllo Altezza e premi il pulsante con i tre puntini
(...) che ti compare cliccando sulla sua proprietà "Dopo aggiornamento".
3) Nella maschera che ti compare seleziona "Generatore di codice" e premi il
pulsante OK
4) Nella finestra che ti compare, lì dove si è posizionato il cursore del
mouse, scrivi la tua formula che potrebbe per esempio essere:
    Me![Peso] = Me![Altezza] * Me![Larghezza] * Me![Spessore] *
Me![PesoSpecifico]
5) Chiudi la finestra Class Module
6) Ripeti i punti da 2) a 5) anche per i controlli Larghezza, Spessore e
PesoSpecifico.
7) Chiudi e salva la struttura della tua maschera.
Roberto

 Me![PesoSpecifico]
Ok ho fatto + o - come hai detto tu, però una cosa mi sfugge....
Sulla maschera ci sono i controlli: cod lamiera, n. pezzi, larghezza e
lunghezza.
Ad ogni Cod. Lamiera corrisponde un peso specifico diverso (hanno diverse
altezze).
Questo Peso Specifico, però non mi appare sulla maschera, ma ce l'ho in una
tabella (relazionata con il Cod. Lamiera).
Ora la mia difficoltà era come fare nella formula ad indicare il percorso di
questo benedetto Peso Specifico!
Mi spiego: per un controllo che sta nella maschera basta scrivere
Me![Lunghezza], ma per un campo che si trova in una tabella? Forse
[TABLEDEFS]![Nome Tabella]![Nome campo Peso Specifico]? Ma non funziona....
Il problema l'ho risolto lo stesso creando un controllo sulla maschera
associato al campo Peso Specifico della tabella, e poi l'ho reso invisibile,
ma sinceramente mi pare poco corretto....
Insomma vorrei togliermi questa curiosità!
Comunque devo dire che è molto gratificante riuscire a risolvere un problema
dopo che ci hai perso così tanto tempo...alla fine hai un grande senso di
soddisfazione! :-)))
--


 wrote in message 8j079v$c7r$1...@nslave1.tin.it...

Per metà ti sei risposto da solo.
Se la tabella che contiene tutti i pesi specifici si chiama TabLamiere ed ha
una chiave primaria numerica chiamata CodLamiera ed un altro campo chiamato
PesoSpecifico, e se è vero che anche nella tua maschera (MASK1) hai un
controllo numerico anche lui chiamato CodLamiera, in tutte le routine di
calcolo, anzichè quello che ti ho indicato nel messaggio precedente, scrivi
questo codice VBA:
        Dim PS As Double
        PS = DLookup ("[PesoSpecifico]", "TabLamiere", "[CodLamiera] =" &
[Forms]![MASK1]![CodLamiera])
        Me![Peso] = Me![Altezza] * Me![Larghezza] * Me![Spessore] * PS
Roberto