Ciao a tutti!
Maschera e sottomaschera.
Nella maschera l'utente crea un movimento, nella sottomaschera vede tutti i movimenti che ha fatto e li può modificare in caso di errore. Semplice.
I campi del movimento sono diversi: data, causale, risorsa, categoria, importo ecc.
Causale, Risorsa e Categoria sono delle caselle combinate, che fanno riferimento ad altrettante tabelle. Se l'utente sbaglia a inserire la risorsa, ad esempio, basta che ne scelga un'altra. Per evitare che l'utente, anziché scegliere una nuova risorsa,
cancelli la risorsa, ho fatto in modo che all'attivazione del campo, scrivo il valore dello stesso in un campo non associato: me!campononassociato = me!risorsa,
nel dopo aggiornamento scrivo:
if not isnull(risorsa) then
bla, bla, bla
else
me!risorsa = me!campononassociato
end if
Tutto bene sia per il campo Risorsa che il campo Categoria.
Quello che non va è il campo Causale: infatti Access intercetta l'errore prima sia del BeforeUpdate che dell'AfterUpdate e mi dice:
"Impossibile assegnare il valore Null a una variabile non di tipo Variant"
L'errore viene intercettato a livello maschera e precisamente sull'evento "Su errore", e anche se gli dico:
MsgBox Err.Number & " - " & Err.Description
mi dà prima il messaggio "errore n° 0 + msg che gli scrivo io", poi mi dà il msg di cui sopra.
In tutti e tre i casi (Risorsa, Causale, Categoria) il valore dei campi è l'ID delle rispettive tabelle (che è contatore), mentre nella tabella Movimenti sono valori numerici. Non capisco la differenza di trattamento che Access mi riserva per il campo
Causale. Avete qualche idea?
PS: se creo una maschera ex novo, basata su tabella Movimenti, e inserisco solo la casella combinata del campo Causale, posso tranquillamente cancellare il valore senza alcun messaggio di errore.