MICHELEPISANI.IT

Errori di Microsoft VBScript

Overflow

Errore di run-time di Microsoft VBScript error '800a0006'

Agosto 03
07:292014

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'.
Tags
Condividi

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

Scrivi un Commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele

Ciao domenico,
hai provato con

Michele

Ciao Luca,
hai provato a contattare l'assistenza di Facebook? Attualmente la via migliore …

domenico

ciao, puoi aiutarmi?

ho creato un form che tramite una chiamata mi restituisce una …

Luca

Peccato che fb abbia modificato tutto ed ora sembra non esserci alcun modo per accedere alle …