Newsgroup: it.comp.appl.access
Titolo: Evento dopo aggiornamento non funziona su campo calcolato in sottomaschera

Ciao a tutti,
 
Un argomento già discusso altre volte , ma su questo non trovo soluzione.
 
Ho una sottomaschera prodotti con un campo calcolato : 
QuantitàInMagazzino = (Somma(nz([QuantitàResidua];0)))
 
Poi, in maschera principale prodotti ho un altro campo : StockMagazzino 
=nz([Sottomaschera prodotti].[Form]![QuantitàInMagazzino];0)
 
Fin qui Ok.
Vorrei aggiungere un avviso  quando lo StockMagazzino è = 0 (ultimo record)
 
Ho inserito dopo aggiornamento/prima di aggiornamento , il codice :
 
if me!StockMagazzino = 0 then
MsgBox "Ricorda codice materiale " & me!nomeprodotto & " da ordinare ", 
vbExclamation, "Avviso di Materiale"
 
Docmd.RunCommand acCmdUndo
 
end if
 
ma  niente non funziona.
 
help me , please
 
.Bat

> ma  niente non funziona.
 
ma scusa, ti rispondi da solo quando dici che e' un campo calcolato... per
cui, gli eventi prima e dopo aggiornamento, quando li avresti se non
"mai"????... non e' che non funziona, e' semplicemente impossibile
applicare tali eventi a un campo calcolato... tutto qui. Devi fare
diversamente...
 
-- 
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.
 
TheSpaceCowboy : 
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12
 


Si, mi rispondo da solo. Ho capito dopo che non puï¿œ funzionare su un 
campo calcolato.
 
Diversamente come ? ... dovrei gestire il controllo sulla tabella ?
Recordset
 
grazie
 

 Recordset
 
ma dipende...!!!! dipende cosa intendi tu per "AVVISO"... l'avviso puo'
essere qualsiasi cosa, un msgbox, una label colorata, ecc... magari metti un
altro campo calcolato e gli dici Iif(TuoValore=0;"ATTENTO";"A POSTO")



Vorrei un messaggio MsgBox .
Il tuo ultimo suggerimento l'ho giï¿œ provato (iif) ï¿œ stata la prima cosa 
venuta in mente visto che la prima non funzionava.  pensavo che in un 
campo calcolato potevo inserire dopo aggiornamento un messaggio MsgBox .
 
Sono impedito.
 
sigh


sei impedito e vuoi fare la cosa piu' complessa? :D se i dati da cui deve
dipendere questo MsgBox, dipendono da altre Form (che dipendono a loro volta da
altre tabelle), devi aprirti (ma a questo punto la domanda e' "QUANDO???") il
recordset di queste, filtrarlo per i dati che ti interessano, verificare il
valore del campo incriminato e allertarti se questo assume zero... non e'
difficile, basta solo saperlo fare! :D
 
Ovviamente se vuoi una mano, no problem, ma deve pero' esserti chiaro il "COSA"
vuoi fare, e soprattutto il "QUANDO", altrimenti vai alla cieca.



E' difficile per me.
vediamo se riesco a dire COSA/QUANDO voglio fare
mi trovo in sottomaschera prodotti eseguo operazioni di carico e 
scarico. Proprio quest'ultimo quando mi trovo ad eseguire l'ultimo 
scarico del prodotto X e per tanto assume valore zero (quindi record 
vuoto senza valore in quantitï¿œresidua) un messaggio dovrebbe dirmi 
"Attenzione il tuo codice materiale ï¿œ a zero" .....
 
Quindi, non si tratta piï¿œ di inserire codice in campo calcolato ma
occore del codice VBA che al momento non so fare.
 
Se puoi darmi una mano, grazie .
 

 Se puoi darmi una mano, grazie .
 
ma scusa, non era cio' che avevi detto inizialmente!!!! (o almeno non era cio'
che avevo capito)... il "QUANDO" a questo punto c'e', ed e' quando fai lo
scarico!!!! fare lo scarico per te cosa vuol dire? inserire un record in
sottomaschera? ovviamente il campo che influenzera' la rimanenza sara' il campo
QUANTITA' del tuo scarico inserito vero?... se cosi' fosse (ma a sto punto credo
sia questa la verita'), il momento in cui devi fare i tuoi conti sono quello in
cui metti il valore "QUANTITA" nel tuo record, preoccupandoti prima di SALVARE
il record (che altrimenti non verrebbe contabilizzato). A questo punto, il
risultato "0" in quale campo della Form padre (e' li' che si trova vero?) si
trova per poterlo interrogare da VBA?



 
Mah, mi son spiegato male ho detto che ho una
maschera principale prodotti con campo : StockMagazzino
=nz([Sottomaschera prodotti].[Form]![QuantitàInMagazzino];0)
 
il calcolo arriva da :
sottomaschera prodotti con un campo calcolato : QuantitàInMagazzino = 
(Somma(nz([QuantitàResidua];0)))
 
Vorrei intercettare il valore "0" in Form principale , per avvisarmi con 
una MsgBox
 
grazie ancora per la pazienza
 

 grazie ancora per la pazienza
 
ancora con sta storia? :D vedo che non mi segui...
ho capito che hai QuantitaInMagazzino che e' una somma di QuantitaRedisua... ma
QuantitaResidua che campo e'? un campo che valorizzi tu a mano in ogni record?
ovvero e' un campo della tabella?



Ahhh chiedo scusa, non ti seguo.. (per fortuna) :P
QuantitàResidua è un campo della tabella, non valorizzato a mano. Ma da 
macro (Azione di query)
su pulsante carico e pulsante scarico
fiuuuù
 

> fiuuuù
 
Io sono pazientissimo pero' e' complicato se continuiamo cosi'... per cui, per
farla breve, dobbiamo (DEVI) individuare il momento in cui si registra (non so
dove e non so quando, questo e' cio' che cerco di chiederti da 1 giorno :D) la
quantita' del carico/scarico... perche' e' quello il momento (quello in cui si
compie l'azione - in verita' subito dopo averla compiuta - ) di interrogare la
quantita' in magazzino e vedere se si e' azzerata rispetto all'attivita' appena
svolta per cosi' darti un Msgbox... mo' e' chiaro?



Si, porta pazienza.
mannaggia, a me sembra di averti risposto alle domande.
la registrazione quantità del carico/scarico avviene nel momento in cui
l'azione sul pulsante carico/scarico compie il calcolo. (con diverse 
query (somma / sottrazione))
Quindi verificare dopo aver scritto in tabella se la quantità è zero.
 
non ne usciamo, spero che non soffri di mal di testa.
 

> non ne usciamo, spero che non soffri di mal di testa.
 
No, non ne usciamo solo perche' mi dici di tutto tranne che rispondere alle mie
domande... piu' di chiederti "DOVE CAVOLO INSERISCI LE QUANTITA' DI CARICO E
SCARICO" (DOVE, ripeto " D O V E ! ! ! ! ! ! ! ! " ) non so' piu' come fare :D
Mi parli di pulsante, di calcolo, e di risultato, ma io ti chiedevo
semplicemente dove inserisci i dati su cui "POI" fai le somme. 


 semplicemente dove inserisci i dati su cui "POI" fai le somme. 
 
vabbe' passiamo oltre, tanto ho capito, non me lo dirai mai... sul pulsante da
codice devi ad occhio e croce:
 
Docmd.RunMacro "NomeTuaMacro"
Doevents
If PercorsoFormNomeTuoCampoControllo=0 then 
Msgbox "AAAATTTTTENZIONE!!!!! STAI A ZEEEEEEROOOOOOOOOOOOOO!!!"
End If



Sono proprio tonto.
le quantità di carico li inserisco nel record con campo [carico_p] e 
quello di scarico nel campo [scarico_p] in sotto maschera prodotti.
In questo modo x singolo prodotto ho tanti posizioni - record sotto 
maschera -
se eseguo lo scarico di tutto - i record - mi troverò ad avere zero
in quel momento mi serve questo benedetto avviso.....
mannaggia dove mi son filato. Mi dimmi che questa volta è chiaro.
senno' lo brucio questo DB. :D
 

 senno' lo brucio questo DB. :D
 
si, brucialo.


 infortunio - 24/10/12
 
Ohh po*c miseria.
Ho sotto mano il libro programmare Access, vedo se riesco....
grazie per l'aiuto... a bruciarlo :P

 grazie per l'aiuto... a bruciarlo :P
 
consiglio... la tabella carico e scarico va ASSOLUTAMENTE
normalizzata... non e'
possibile (nel senso che e' illogico) avere 2 campi per 2 eventi simili
anche se
opposti (carico e scarico). Una quantita' e' lo scarico, una quantita' e' il
carico... ora basta semplicemente avere un solo campo quantita' (quindi
non 2) e
un campo Tipologia che specifica se quella specifica quantita' e' un
carico o
uno scarico (mettendo magari 1 per il carico e 2 per lo scarico)...
questa si
chiama normalizzazione, e serve a non farti aggiungere un terzo campo se ti
inventi una nuova tipologia... bastera' aggiungere nel campo Tipologia,
3 Terza
tipologia... spero ti sia chiaro almeno questo.



Si grazie.
Intanto il DB è ancora vivo :D
con :
If (Form![sottomaschera prodotti]!QuantitàResidua) = 0 
ho il controllo sul singolo record.
 
Quindi per avere il controllo di tutti i record
mi occorre una select count(*) from tabella_sottoprodotti where ....
sto studiando,
penso di farcela. :D

 
 
".Bat"  ha scritto nel messaggio 
news:d8c3dc0b-0ff1-4161...@googlegroups.com...

Fatto !
era proprio quello che mi serviva.
 

 era proprio quello che mi serviva.
 
di solito in un NG quando si trova una soluzione, o quando qualcuno la trova per
te, la si condivide... ma siccome nessuno in 50 3d ha capito cosa e come la
volevi, per questa volta, passi ;)



 
cattivo !!
ho fatto cosï¿œ :
Dim conn As ADODB.Connection
dim rst As ADODB.Recordset
 
Set conn = CurrentProject.Connection
Set rst = New ADODB.Recordset
SQL = "SELECT COUNT (*) AS Conta FROM transazioni WHERE nomeprodotto='" 
& Me.NomeProdotto & "'"
rst.Open SQL, conn
if rst("conta") = 1 then
MsgBox "Attenzione, ultima quantitï¿œ prelevata :" & 
Forms!prodotti!Quantitï¿œInMagazzino & "", vbExclamation
end if
 
piï¿œ o meno ï¿œ cosi. Non ho il codice davanti.
Ma funziona.
 
Mi dispiace per non essere stato chiaro.
 
grazie