Newsgroup: it.comp.appl.access
Titolo: campo calcolato e aggiornamento tabella

Salve
ho 2 maschere associate a  2 tabelle
"maschera specifica" associata alla tabella [tabella specifica]
"maschera trasferta"  (continua) associata alla tabella  [tabella trasferta]
la [tabella specifica]contiene 3 campi  [dirittoT] [trasfertaT] [totaleT]
la "maschera Specifica" contiene i 3 controlli corrispondenti...
[diritto] [trasferta] [totale]
la [tabella trasferta] contiene 2 campi  [ID trasferta]  [trasferta]
la "maschera Trasferta" contiene 1 controllo [trasferta]
naturalmente le 2 tabelle sono collegate da una relazione 1 a Molti tra i
campi [ID trasferta] e [trasferta]
il controllo [totale] della  "maschera specifica" non è associato
al corrispondente campo [totaleT]della tabella sottostante
ma  ha  come origine dati la seguente espressione  = [diritti] + [trasferta]
Sull'evento After_update del controllo casella combinata [trasferta]
attribuisco, tramite codice,
al campo [totaleT] della tabella  [tabella specifica] il valore del
controllo [totale ] della maschera...
me.totaleT = me.totale
e cosi mi aggiorno pure il campo [totaleT] della tabella sottostante...
ho però un problema  se devo modificare il valore della trasferte....
(es...le trasferte aumentano ....)
- aggiorno i valori delle trasferte nella [tabella trasferta] tramite la
"maschera trasferte".....
- sull'evento *dopo aggiornamento* della "maschera trasferta"
 (Form_AfterUpdate )
ho inserito il seguente codice
 Form_Specifica.Recalc
che mi aggiorna  il controllo calcolato [totale] della "maschera
specifica".....
 così  riaprendo la "maschera specifica" mi ritrovo non solo le trasferte
aggiornate ma
pure il controllo calcolato  [totale] gia' aggiornato con il nuovo
totale.....
PROBLEMA...
 il campo [totale] della sottostante [tabella specifica] non viene
aggiornato
automaticamente dal Recalc...mi rimane il vecchio valore......
per aggiornarlo devo...
1) immettere nuovamente nel controllo casella combinata  [trasferta] della
"maschera specifica" il
valore della trasferta (gia' visualizzato)
 cosi' che, sull'evento AfterUpdate del controllo, il codice
me.totaleT = me.totale
mi riaggiorna  il campo [totaleT] della tabella sottostante...
2) oppure....mi chiedevo.. e' possibile automatizzare anche l'aggiornamento
del campo [totaleT] della   [tabella specifica] come per la maschera ????
rendere questo aggionamento "trasparente" all'utente???  Ad esempio...
....prevedere sull'evento *dopo aggiornamento* della "maschera trasferta"
 (Form_AfterUpdate ) qualche riga di codice che "automatizzi" l'update del
controllo [totaleT] della [tabella specifica]...
Spero di essere stato chiaro...
scusate la lunghezza e grazie in anticipo per le risposte
Roberto Bolelli

 Form_Specifica.Recalc
Uovo di colombo!!!
Scriverai anche forms("maschera specifica").totaleT = forms("maschera
specifica").diritti + me.trasferte
Antonio

 wrote in message
88rosp$ucd$2...@lacerta.tiscalinet.it...

Anzitutto grazie per la risposta...
ho seguito il tuo suggerimento e finalmente il campo [totaleT] della tabella
si aggiorna:-)))
Form_Specifica.Recalc
Form_specifica.TotaleT =Form_specifica. diritti + Form_specifica.trasferta
Form_specifica.Refresh
Volevo tuttavia chiederti un ulteriore lume......
(nel precedente post avevo omesso alcuni dettagli per semplificare la
spiegazione)
la [tabella specifica] contiene in realtà anche un 4° campo [localitaT]
..cioè avremo
[localitaT]  [dirittiT] [trasfertaT]  [totaleT]
le chiave primaria di questa tabella sono i 2 campi [localitaT] e
[trasfertaT]
quindi:
1) posso avere piu localita' con la medesima trasferta ( Pianoro   10000;
Rastignano 10000)
2) ma alla medesima località posso associare una sola volta una trasferta
(Bologna 5000; Bologna 10000)
Problema.....
Il codice da te suggerito mi aggiorna   il campo [totaleT] solamente del
primo record della [tabella specifica]
...per esempio.......
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000            5000            15000
 Pianoro       10000          10000            20000
 Bologna      10000          10000            20000
supponiamo che dalla "maschera trasferte" aggiorni la trasferta da £ 5000 a
£ 15000 mi ritrovo
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
Bologna      10000          15000           25000
 Pianoro       10000         10000           20000
 Bologna      10000         10000           20000
 e fin qui tutto ok......
ma se dalla "maschera trasferte" (che ha come origine dati la [tabella
trasferte] legata da un rapporto
uno-molti alla [tabella specifica]) aggiorno la trasferta da £ 10000 a £
20000 mi ritrovo......
 [localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
Bologna           10000        5000           30000
 Pianoro          10000       20000           20000
 Bologna          10000      20000           20000
 come vedi mi  ritrovo aggiornato il valore del campo [trasfertaT] ..ma il
campo [totaleT] del primo record..
mentre rimane inalterato il valore del campo[totaleT] dei 2 record la cui
trasferta e' stata aggiornata...(Pianoro e Bologna da  10000 a £ 20000)
io, invece, dovrei ripescare dalla [tabella specifica] solamente quei record
in cui il valore del campo
[trasfertaT] è uguale alla trasferta aggiornata  (nell'ultimo esempio £
10000) ed aggiornare il campo [totaleT]solamente di
quei record (nel ultimo esempio  i record Pianoro e Bologna la cui trasferta
da  £ 10000 e' stata aggiornata a £ 20000)....
Ti ringrazio per i suggerimenti....
Roberto Bolelli

Ti ringrazio per i suggerimenti....
Secondo me hai impostato male il problema.
Intanto non capisco quando dici che una trasferta è assegnabile a più
località ( e questo ci potrtebbe stare) ma alla medesima località puoi
associare una sola volta una trasferta (Bologna 5000; Bologna 10000)
Perfetto, ma allora ci dovrebbe essere un solo record bologna, non 2.
Secondo me tu dovresti avere una combo che ti propone tutte le località
inserite in modo che se ne selezioni una sulla maschera ti compare la
trasferta. Poi, se non va bene la trasferta, la modifichi, anche
direttamente nella maschera principale senza aprirne un'altra...
Antonio

 wrote in message
895rtn$qhk$1...@lacerta.tiscalinet.it...


Ancora grazie per la risposta...per i nuovi suggerimenti....e la pazienza...
....riprovo  ad illustrarti nuovamente come ho "riorganizzato" il DB...
ho 4 tabelle  che contengono i seguenti campi
[tabella localita]    [tabella trasferta]   [tabella diritti]
ID localita                    ID trasferta             ID Diritti
Localita                          Trasferta                Diritti
[tabella Specifica]
ID specifica
LocalitaT
dirittiT
TrasfertaT
TotaleT
tra  la [tabella specifica]  e le altre 3 esiste una relazione "uno a molti"
sui seguenti campi:
ID localita' > localitaT
ID trasferta >TrasfertaT
ID diritti >    DirittiT
nella [tabella specifica] mi ritrovo per esempio 4 record:
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000            5000            15000
 Bologna      10000          10000            20000
 Pianoro       10000          10000            20000
 Monzuno      10000         15000            25000
Le chiave primaria della [tabella specifica]  sono i campi [localitaT] e
[trasfertaT]......
cosi  potro' avere....
1)  piu localita' con la medesima trasferta ( Pianoro   10000;
     Bologna 10000)
2) ma alla localita'  Bologna, ad esempio, potro' associare una sola volta
la trasferta £
10.000
     poiche se tentassi di salvare piu' di un  record  contenete [LocalitaT]
Bologna e [trasfertaT] 10.000
   Access lo impedirebbe avvertendomi  che sto tentando di duplicare una
chiave primaria per la quale non sono ammessi   duplicati....
Questa la situazione tabelle.....
... di maschere ne ho 3....
"maschera localita" con cui aggiorno la [tabella localita] (immetto nuove
localita' o modifico le precedenti)
"maschera Trasferta" con cui aggiorno la [tabella trasferta] (immetto i
valori delle trasferte aggiornate)
"maschera Crea Specifica"  che contiene la sottomaschera   "specifica". (con
cui creo o aggiorno le specifiche)
(la "specifica" e' in sostanza un record della [tabella specifica]  )
allora ...nella "maschera Crea Specifica" ho un unico controllo
rappresentato dalla
combo box [localita] che ha come origine dati la [tabella localita]
ho naturalmente collegato la sottomaschera " specifica" tramite i campi
master e secondari [id localita] e [localitaT]....
quindi selezionando una localita' dalla combo [localita] della "maschera
Crea Specifiche"
 (ad es. bologna) mi compaiono
nella sottomaschera " specifiche" tutte le specifiche, relative a Bologna,
 contenute nella [tabella specifica]
[località]    [diritti]     [trasferta]        [Totale]
Bologna      10000            5000            15000
 Bologna      10000          10000            20000
 la  sottomaschera "specifica" ha infatti come origine dati la [tabella
specifica]....
e contiene i seguenti controlli....
[località]    [diritti]     [trasferta]        [Totale]
il controllo [Totale] della  sottomaschera "specifica" non è associato
al corrispondente campo [totaleT]della tabella sottostante
ma  ha  come origine dati la seguente espressione  = [diritti] + [trasferta]
mentre il controllo [trasferta] della sottomaschera "specifica" e' una combo
che ha come origine dati la [tabella trasferte]
Sull'evento After_update del controllo casella combinata [trasferta]
attribuisco, tramite codice,
al campo [totaleT] della tabella  [tabella specifica] il valore del
controllo [Totale ] della maschera...
me.totaleT = me.totale
e cosi mi aggiorno  il campo [totaleT] della tabella sottostante...
in sostanza con la " Maschera Crea Specifica" creo appunto le specifche,
associando ad ogni localita' selezionata la trasferta o  trasferte
dovute...ed aggiorno
cosi' i record della [tabella specifica]....
seleziono una localita' dalla combo della maschera e nella sottomaschera
"specifica" tramite la combo [trasferta] associo la trasferta
 alla località e creo la specifica....
IL PROBLEMA
nasce quando vado i valori delle trasferte vengono aggiornati dal
ministero...
1) tramite la "maschera trasferta"  aggiorno la [tabella trasferta]....
2) sull'evento *dopo aggiornamento* della "maschera trasferta"
 (Form_AfterUpdate )
ho inserito il seguente codice
 Form_Specifica.Recalc
 il che mi aggiorna  il controllo calcolato [totale] della sotto maschera
"specifica".....
 così  riaprendo la sotto maschera"specifica" mi ritrovo non solo le
trasferte
aggiornate ma
pure il controllo calcolato  [totale] gia' aggiornato con il nuovo
totale.....
seguendo il tuo consiglio, per aggiornare anche il campo
 [totaleT] della [tabella specifica], ho immesso il seguente
 codice sempre, sull'evento AfterUpdate della maschera [trasferta].....
Form_specifica.TotaleT =Form_specifica. diritti + Form_specifica.trasferta
Form_specifica.Refresh
(NB. il controllo [trasferta] della sottomaschera  "specifica" e' una combo
che ha
come origine dati
la [tabella trasferta]...quindi aggiornando la [tabella trasferta] mi
ritrovo i valori aggiornati
anche nel controllo [trasferta] della sottomaschera "specifica")
cosi' si aggiorna anche il campo [totaleT] della [tabella specifica]....
ma c'e il problema che ti esponevo nel precedente post che ti riporto per
comodità di lettura...
Il codice da te suggerito mi aggiorna   il campo [totaleT] solamente del
primo record della [tabella specifica]
...per esempio.......
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000            5000            15000
 Bologna      10000          10000            20000
 Pianoro       10000          10000            20000
 Monzuno      10000         15000            25000
supponiamo che tutte le trasferte aumentino di £ 10000
(la [tabella trasferte] contiene in ordine cresente le trasferte
5000-10000-15000 ecc)
dalla "maschera trasferte" aggiorni la prima trasferta da £ 5000 a
£ 15000 mi ritrovo
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000           15000            25000
 Bologna      10000          10000            20000
 Pianoro       10000          10000            20000
 Monzuno      10000         15000            25000
 e fin qui tutto ok......Il campo[totaleT] e' stato giustamente aggiornato a
£  25.000
ma se dalla "maschera trasferte"  aggiorno la  seconda trasferta da £ 10000
a £ 20000 mi ritrovo......
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000           15000           (30000)!!!
 Bologna      10000          20000            20000
 Pianoro       10000          20000            20000
 Monzuno      10000         15000            25000
 come vedi mi  ritrovo aggiornato  a £ 30.000 il campo [totaleT] del "primo
record." della [tabella specifica]
mentre rimane inalterato il valore del campo [totaleT] dei 2 record la cui
trasferta e' stata aggiornata...(Pianoro e Bologna da £ 10000 a £ 20000)
io, invece, a mano a mano che aggiorno le trasferte dalla "maschera
Trasferta",
dovrei ripescare dalla [tabella specifica] solamente quei record
in cui il valore del campo
[trasfertaT] è uguale alla trasferta aggiornata  (nell'ultimo esempio £
10000) ed aggiornare il campo [totaleT]solamente di
quei record (nel ultimo esempio  i record Pianoro e Bologna la cui trasferta
da  £ 10000 e' stata aggiornata a £ 20000)....
altrimenti, dopo l'aggiornameto delle trasferte, mi trovo
1) con una "maschera crea specifiche" che, grazie al RECALC,  mi mostra,
nella sottomaschera
 "specifiche"  tutti i record (le specifiche) correttamente aggiornati
[località]     [diritti]      [trasferta]        [Totale]
 Bologna      10000           15000          25000
 Bologna      10000          20000            30000
 Pianoro       10000          20000            30000
 Monzuno      10000         25000            35000
2) una [tabella specifiche] con dei valori non corrispondenti alla
sottomaschera "specifica"
[localitàT]    [dirittiT]   [trasfertaT]  [TotaleT]
 Bologna      10000           15000          (35000)!!!
 Bologna      10000          20000            20000
 Pianoro       10000          20000            20000
 Monzuno      10000         25000            25000
Questo è quanto....
spero di essere stato piu' comprensibile....ed aver impostato correttamente
il tutto..
scusa la lunghezza esagerata del post....ed ancora una volta ...grazie
Roberto Bolelli


Finalmente..... ci sono riuscito......
ora i campi della [tabella specifica] si aggiornano
a mano a mano che aggiorno il valore della trasferte dalla "maschera
trasferte"...
Private Sub Form_AfterUpdate()
Dim db As Database
Dim rst As Recordset
Dim criterio As String
Set db = CurrentDb
Set rst = db.OpenRecordset("tabella specifica", dbOpenDynaset)
criterio = ("[trasfertaT] =  " & Me.[ID Trasferta] & "")
rst.MoveLast
rst.FindFirst (criterio)
    If rst.NoMatch Then
Exit Sub
Else
Form_Specifiche.Recalc
Do Until rst.NoMatch
rst.Edit
rst![SubtotaleT] = Form_Specifiche.Diritti.Value + Me.Trasferta.Value
rst![TassaT] = Int(((Me.Trasferta) * 0.1) / 5 + 0.9) * 5
rst![TotaleT] = rst![SubtotaleT] + rst![TassaT] + Form_Specifiche.Bollo
rst.Update
rst.FindNext (criterio)
Loop
End If
rst.Close
End Sub
Ciao e grazie
Roberto Bolelli