Errore di run-time di Microsoft VBScript error '800a0006'
Overflow
/test_errori.asp, riga 4
L'errore "Overflow" lo possiamo trovare spesso in forme più dettagliate, come ad esempio Overflow: 'CInt' (vedere poco sotto) ma quando compare da solo, come nel caso del codice di esempio di cui sopra, è probabile che ci troviamo di fronte ad un calcolo di una forma indeterminata.
Non scendo in dettagli matematici e calcoli infinitesimale in quanto non è questa la sede e probabilmente non ne ho neanche le competenze adatte ma una classica forma indeterminata è la divisione di 0 con 0.
Il codice esemplificativo per ottenere l'errore oggetto di discussione è il seguente:
<%
mio_dividendo = 0
mio_divisore = 0
mio_risultato = mio_dividendo/mio_divisore
%>
Visto così viene da chiedersi quale pazzo possa ritrovarsi in una situazione del genere, ebbene può capitare spesso in un contesto reale basti pensare ad una formula che calcoli il rapporto tra gli ordini ricevuti in un giorno e tutti gli ordini ricevuti nello stesso mese. C'è la possibilità che il primo giorno del mese subito dopo la mezzanotte dell'ultimo giorno del mese precedente non ci siano ordini ricevuti e pertanto se questo caso non viene in qualche modo gestito la formula in questione si troverà a calcolare 0/0 restituendo l'errore "Overflow".
Guardiamo adesso il caso di Overflow: 'cInt'.
Errore di run-time di Microsoft VBScript error '800a0006'
Overflow: 'cInt'
/test_errori.asp, riga 3
L'errore Overflow: 'cInt' viene restituito quando l'argomento dato in pasto alla funzione cInt non è un numero, intero o decimale, compreso tra -32.768 e 32.767 che sono appunto i limiti del range di azione di questa funzione.
L'errore è pertanto riproducibile con il codice seguente:
<%
mio_valore = "45000"
mio_numero_intero = cInt(mio_valore)
%>
Soluzione: Gestire semplicemente, ad esempio con una condizione, il caso in cui il dividendo ed il divisore possano trovarsi a valere entrambi 0 ed evitare così che venga eseguito il calcolo incriminato.
Un caso analogo ma con un messaggio di errore più chiaro si ottiene nel caso in cui solo il divisore è uguale a 0.
Quando un valore supera la dimensione supportata dalla funzione cInt è possibile evitare l'errore di Overflow utilizzando la funzione cLng che necessita di maggior memoria ma consente di gestire argomenti numerici di maggiori dimensioni, ovvero tra -2.147.483.648 e 2.147.483.647.
Lo stesso codice visto sopra dovrà pertanto essere scritto in questo modo per poter funzionare:
<% mio_valore = "45000" mio_numero_intero = cLng(mio_valore) %>
Analogamente al caso precedente, se il valore passato alla funzione eccede i limiti indicati viene restituito l'errore Overflow: 'cLng'.
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
Scrivi un Commento