Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Inserimento tramite maschera in un campo il valore calcolato da una query.

814 views
Skip to first unread message

Stefano Busnelli

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
Devo poter inserire in un campo di un record di una certa tabella A,
utilizzando una maschera, il valore dato dalla somma dei valori
contenuti in un altro campo di un certo numero di record di un altra
tabella B.
Per fare questo ho pensato di utilizzare una casella combinata (quelle
del tipo menu' a tendina) associata ad una query che esegue
correttamente il suo lavoro.
Per dire alla query quali valori sommare, le faccio fare il confronto
fra il valore di un campo di questi record della tabella B con il valore
contenuto in una casella della maschera che e' associato ad un campo del
record corrente della tabella A.
Ora qui viene la magagna.
Io apro la maschera e mi posiziono sul record che voglio.
Apro la query e mi visualizza la somma correttamente, insomma fa proprio
quello che voglio. Se cambio record e riapro la query mi visualizza una
somma diversa da quella precedentemente in base ai dati che sono
differenti.
Dico va be', se la query fa il suo dovere la casella combinata essendo
stata creata con quella query dovrebbe visualizzare lo stesso valo.
Invece no, si fa i cazzi suoi.

Ovvero, se apro la maschera e mi posiziono su un record, quando clicco
sul menu' a tendina mi visualizza il valore corretto. Se mi sposto su un
altro record (il valore nella casella della maschera che utilizzo per
dire alla query quali sommare cambia visualizzando il dato del record
corrente che e' differente da quello precedente poiche' e' la chiave
della tabella e non ci sono doppioni) quando attivo la casella combinata
mi appare ancora il valore che ho visto prima, pur essendo differenti i
valori da sommare ed il valore della loro somma da quello visualizzato
precedentemente.

Non so se sono stato chiaro, spero di si.

Chi sa darmi una dritta su cosa fare? In linea generale il procedimento
mi sembra giusto, solo che non riesco a capire perche' (e quindi
rimediare) mi appare ancora il valore di prima come se fossi ancora sul
record precedente.

Ho riscontrato lo stesso problema anche in altre occasioni, quindi credi
di essere io a sbagliare.

Io utilizzo Access 97 di Office 97 professional.

Se potete darmi qualche dritta ve ne sarei molto grato, e vi pregherei
di rispondermi via e-mail all'indirizzo sbus...@m-b.it

Grazie 1000 e buon lavoro :)

Stefano Bettini

unread,
Aug 5, 1998, 3:00:00 AM8/5/98
to
Mi par di capire che il tuo problema e` un mancato "refresh" della query.
Se le cose stanno cosi` prova ad aggiungere sull'evento Corrente della
maschera
l'istruzione x la requery della combo (docmd.requery "Nome_Controllo").

Cmq credo che x queste cose sia enormemente piu` semplice utilizzare
una funzioncina vba ad hoc.


Ciao.

Stefano Busnelli

unread,
Aug 6, 1998, 3:00:00 AM8/6/98
to
Vi ringrazio tantissimo per aver risposto al mio messaggio.

Effettivamente li non mi servirebbe nemmeno una casella combinata,
basterebbe una semplice casella di testo in cui io devo inserire il
tolate di una somma, e mi piacerebbe che appaia come valore predefinito
il valore di questa somma. Poiche' non mi pare sia possibile associare
una query ad una casella di testo ho dovuto tirare in ballo la casella
combinata, ma come ho scritto con strani risultati, perche' pare che la
query dopo essere partita la prima volta, anche se apparentemente le
fornisco dei valori nuovi considera sempre quelli vecchi.

Purtroppo non conosco molto il VB, e come supporto tecnico ho solo la
guida in linea.

Come mi ha scritto anche Michele via E-Mail credo che il problema si
possa risolvere utilizzando il Visual Basic, cioe' mettendo una riga del
tipo Nomecasella.value = una certa funzione.

Pero' cosi' si complicano le cose, perche' quella funzione dovrebbe fare
il lavoro della query che e' semplicissimo scrivere utilizzando SQL, ma
molto piu' difficile in VB, ammesso che si possa fare.

A qualcuno e' mai capitato di dover risolvere un problema di questo
tipo?
Cioe' di avere ad esempio una tabella con un certo numero di dati per
ogni evento e di dover far apparire in un altra tabella, chiamiamola
riassuntiva, il totale di questi dati per ogni evento?

Es:
Tabella dati:
EVENTO DATO
1 2
1 3
1 5
2 1
2 4
3 2
3 5

Tabella riassuntiva:
EVENTO TOTALE
- -

Tramite un maschera associata a quest'ultima vorrei poter inserire la
somma dei dati della prima tabella per ogni record un cui EVENTO e'
uguale, facendo apparire in una casella di testo come valore predefinito
il totale che posso anche modificare, compilando la seconda tabella in
questo modo:
EVENTO TOTALE
1 10
2 5
3 7

Mi pare che non sia un problema tanto raro da risolvere, percio' se
qualcuno sa come sia stato risolto vi prego di comunicarmelo.

Grazie 1000 e buon lavoro a tutti.

Stefano Busnelli

unread,
Aug 6, 1998, 3:00:00 AM8/6/98
to Stefano Bettini
Ho provato ed avevo proprio ragione. Ho aggiundo all'evento "corrente"
della maschera docmd.requery "SommaKg" ed ora funziona alla grande.
Grazie, 6 un mito.

Ciao :)

Michele Altieri

unread,
Aug 6, 1998, 3:00:00 AM8/6/98
to
Questo problema si può risolvere in modo semplice senza usare form. Non
conviene aggiungere il risultato ad una tabella: i campi calcolati non vanno
mai memorizzati se non in casi particolari in cui il calcolo è molto
complesso. Quindi il metodo da utilizzare è una query che utilizzi funzioni
di aggregazione.
Per realizzare questa query crea una nuova query in modalità struttura;
premi il pulsante "Totali" sulla barra degli strumenti (è il tastino con il
segno di sommatoria). Compare così una nuova riga "Formula" nel riquadro in
basso. In questa riga si selezionano i campi in base ai quali raggruppare i
record e i campi calcolati mediante funzioni di aggregazione (tipo somma,
media, ecc...) sui record di ogni campo. Questo è proprio quello che vuoi:
Devi cioè selezionare "Raggruppamento" per il campo "Evento" e "Somma" per
il campo "Dato".

Il codice SQL che dovresti ottenere è il seguente:

SELECT A.Evento, Sum(A.Dato) AS SommaDiDato
FROM A
GROUP BY A.Evento;

dove A è la tabella con i due campi "Evento" e "Dato"

ciao, Marco Altieri

Stefano Busnelli

unread,
Aug 6, 1998, 3:00:00 AM8/6/98
to
ok, questo e' proprio quello che ho fatto, ho associato il risultato di
questa query alla casella combinata e le ho messo come origine controllo
il campo che in questo caso e' TOTALE, per registrarne il valore nella
tabella dei totali.
Il problema era dovuto al fatto che la query quando partiva le volte
successive chissa' perche' non si aggiornava e visualizzava sempre il
primo risultato.
Tutto cio' e' stato risolto aggiungendo il comando VB requery.

Ciao a tutti e grazie per l'aiuto

:)

Stefano Busnelli

unread,
Aug 6, 1998, 3:00:00 AM8/6/98
to
Ho provato ed avevi proprio ragione. Ho aggiundo all'evento "corrente"
0 new messages