Intercettare l'errore: "Impossibile assegnare il valore Null..."

Anonimo
2014-01-31T10:48:42+00:00

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.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2014-01-31T14:06:38+00:00

Ho capito! L'origine della maschera è una query in cui i campi della tabella Movimenti sono legati alle loro rispettive tabelle. Tutti i legami hanno la proprietà join n° 2, tranne quello della causale che era legato con la proprietà join n° 1...

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-02-01T09:27:06+00:00

    Già, il fatto è che l'autore non riesce a contrassegnare (almeno mi sembra), e volevo togliere la bandierina.. Ciao Giorgio, e grazie!  ; )

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-01-31T17:20:56+00:00

    Ciao francescodiassisi,

    bene!! grazie per aver condiviso la soluzione, contrassegna la tua come risposta, è quella che ha risolto.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-01-31T13:47:13+00:00

    Rien a faire, non c'è alcuna condizione sulla proprietà "Valido se", e non ci sono nemmeno formattazioni condizionali...

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-01-31T13:21:20+00:00

    Ciao francescodiassisi,

    controlla cosa c'è nella proprietà "Valido se" sia nel campo "causale" della tabella, sia nella casella testo associato ad esso nella maschera.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento