Newsgroup: it.comp.appl.access
Titolo: Riportare somma valori sottomaschera in un campo di una maschera

Salve a tutti.
Premetto che sono un po' ignorante in materia, ma sto imparando.
Il mio problema è il seguente.
Ho una maschera Ricetta, e la maschera Prestazione. Le ho create selezionando le tabelle e usando il comando Crea > Maschera. Entrambe le tabelle originarie hanno il campo ID_NumeroRicetta, tramite il quale le ho collegate in una relazione uno (Ricetta) a molti (Prestazione). Pertanto, quando apro la maschera Ricetta, nella parte bassa mi appare la maschera Prestazione, come foglio dati.
Ogni prestazione ha un campo ImportoTotale. Il numero di prestazioni di ogni ricetta può variare. Quello che vorrei fare è: stante il ID_NumeroRicetta, sommare gli ImportoTotale di tutte le prestazioni e riportarlo nella maschera ricetta, in un campo TotalePrestazioni, non associato, che ho creato appositamente.
Inoltre, se può essere utile, ho creato una query sulla tabella Prestazione che, per ogni ricetta, mi dà il totale degli ImportoTotale delle prestazioni. Ma poi non so come sfruttare questa query.
 
Potete aiutarmi?

 
sull'evento aggiorna del campo importo della sottomaschera prova a 
scrivere il seguente codice:
 
Private Sub importo_AfterUpdate()
Dim temp As Currency
 
temp = Nz(Me.importo, 0)
tot = DSum("importo", "prestazione", "ID =" & Forms!ricetta!ID) + temp
Forms!ricetta!totale = tot
 
 
End Sub
 
Akery
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

 Inoltre, se può essere utile, ho creato una query sulla tabella Prestazione che, per ogni ricetta, mi dà il totale degli ImportoTotale delle prestazioni. Ma poi non so come sfruttare questa query.
 
Nella vis. struttura della maschera "Prestazione" nella sezione 
"Intestazione maschera" crea una nuova casella di testo 
"txtTotalePrestazione". Come origine controllo usi:
 
=Sum(ImportoTotale)
 
Nella maschera principale nella tua casella "TotalePrestazioni" usi 
quest'origine controllo:
 
=Prestazione!txtTotalePrestazione
 
Ci sono varie trappole perché non potrebbe funzionare subito ma prima 
prova questa variante semplice.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 

Per Akery
Innanzitutto, grazie per la risposta.
Scrivo qui di seguito il codice che mi hai suggerito, come l'ho scritto. Ho cambiato i nomi dei campi, pensando di dover mettere quelli corretti (poi magari mi dirai tu se ho sbagliato:
 
Private Sub ImportoTotale_AfterUpdate()
 
Dim temp As Currency
 
temp = Nz(Me.ImportoTotale, 0)
tot = DSum("ImportoTotale", "Prestazione", "ID_NumeroRicetta = Forms!Ricetta!ID_NumeroRicetta") + temp
Forms!Ricetta!TotalePrestazioni = tot
 
End Sub
 
E' corretto?
Se lo è, non funziona. Il campo TotalePrestazioni mi rimane vuoto.
Non so se può essere una spiegazione ma la maschera Prestazioni non è una vera e propria sottomaschera, ma è un'altra maschera, legata alla maschera Ricetta dalla relazione 1 a molti. In virtù di questa relazione, quando apro Ricetta nella parte bassa mi appare il foglio dati di Prestazioni in automatico.
 
 
Per Karl
Grazie per la risposta. Dunque ho provato la soluzione da te proposta, ma riscontro due problemi.
1. Il nuovo campo della maschera Prestazioni riporta il totale di tutte le prestazioni presenti, mentre a me serve quello relativo alle prestazioni di una sola ricetta alla volta.
2. In tutti i casi, il campo TotalePrestazioni nella maschera Ricetta mi errore #Nome?
 
Che ne pensi?

 Che ne pensi?
 
1. È normale se apri la maschera Prestazione direttamente. Invece come 
sottomaschera con record filtrati anche la somma si riferisce ai record 
filtrati.
 
2. Ci sono diverse possibilità. p.e.
 
2.1. Qualche volta aiuta di cambiare la sintassi da
 
=Prestazione!txtTotalePrestazione
 
a
 
=Prestazione.Form!txtTotalePrestazione
 
2.2. Se non aiuta, nella maschera principale controlla il nome del 
controllo sottomaschera. Forse questo nome non è "Prestazione". Vedi 
http://www.donkarl.com/it?FAQ4.2
.



Grazie Karl.
Come ho detto nel mio primo post, per creare le singole maschere, dopo aver selezionato la singola tabella, ho usato il pulsante Crea > Maschera.
Questo ha comportato che la sottomaschera Prestazione, che appariva nella parte bassa della maschera Ricetta, avesse come origine la "tabella" Prestazione e non la "maschera" Prestazione. Quindi pur avendo creato il campo txtTotalePrestazioni nella vera maschera Prestazione, Access non lo trovava. Per questo mi dava errore.
Sostituendo l'origine è andato subito a posto. :-)
 
Almeno ho imparato che la composizione automatica va controllata.
 
In tutti i casi, grazie mille per le vostre dritte.
A risentirci presto, mi sa, per varie ed eventuali.
 
NB. Per Akery. A questo punto sono curioso di sapere come sarebbe andata la soluzione da te proposta, senza questo problema che era a monte. Quindi verifico e ti faccio sapere. Se puoi, dimmi solo se il codice, come te l'ho riscritto (cambiando i nomi dei campi), va bene...

 
  - NB. Per Akery. A questo punto sono curioso di sapere come sarebbe 
andata la soluzione da te proposta, senza questo problema che era a 
monte. Quindi verifico e ti faccio sapere. Se puoi, dimmi solo se il 
codice, come te l'ho riscritto (cambiando i nomi dei campi), va bene...
 
 
puoi provare direttamente
https://www.dropbox.com/s/lbeobohxro4jrh4/sommasubform.accdb?dl=0
 
 
è il db prova che ho fatto per scrivere quelle righe di codice



 
Private Sub ImportoTotale_AfterUpdate()
 
Dim temp As Currency
 
temp = Nz(Me.ImportoTotale, 0)
tot = DSum("ImportoTotale", "Prestazione", "ID_NumeroRicetta =" & 
Forms!Ricetta!ID_NumeroRicetta) + temp
Forms!Ricetta!TotalePrestazioni = tot
 
End Sub
 
questa è formalmente corretta



Grazie. Provo

Sì Akery, funziona anche così... forse è anche più pulito come codice.
 
Grazie mille!