Visual Basic - Crei que sabia algo de VB....

Life is soft - evento anual de software empresarial
   
Vista:

Crei que sabia algo de VB....

Publicado por Tontolkulo (3 intervenciones) el 06/12/2008 03:39:19
Pues eso, que creia saber algo de Vb pero veo que me falta muuuuuucho por aprender.
He probado todo, y me rindo. NO se porque la siguienter linea me dá 'error 6 en tiempo de ejecucion' Desbordamiento.

Din kk as Long
kk=10000*12

Por supuesto forma parte de una programa mas amplio, pero estoy clavado aqui y no paso.
El desbordamiento, (o eso creia yo) se produce cuando una variable supera el valor con el que ha sido declarada, pero he declarado kk como Integer, Currency, Variant y me da el mismo error. Empezaba a sospechar hasta del PC, pero he probado esta linea en otro PC y lo mismo.

Me rindo. ¿alguien puede sacarme de aqui?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crei que sabia algo de VB....

Publicado por Tontolkulo (3 intervenciones) el 06/12/2008 03:43:28
....es Dim kk as long, me equivoque y puse Din. Me refiero que no era eso, que el error sigue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crei que sabia algo de VB....

Publicado por Carlos (10 intervenciones) el 06/12/2008 05:56:51
Que tal porque no pruebas hacer un debug a puro F8 y lo mas importante tener la sentencia option explicit al inicio de la cabacera de declaraciones generales solo eso por si tienes mas dudas solo pregunta y si eso no resuelve el problema quiza despues del debug nos des mas datos, ¿cabe la posibilidad de que halla variables duplicadas una en un modulo y otra en el formulario donde tienes la sentencia que describes? no lo se cuentanos haber que sucedio, bye
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crei que sabia algo de VB....

Publicado por igor (633 intervenciones) el 06/12/2008 13:37:00
Lo siento amigo Carlos, no tienen nada que ver con variables duplicadas ni cosas raras.

En teoría VB6 facilita la labor de programar en comparación con C, pero el la práctica....

Recordamos que Option explicit obiga a declarar las variables explicitamente, nos curamos en salud para que no se nos olviden cosas, tampoco es el problema.

El problema es que realizamos una operación entre enteros y el resultado debe almacenarse en un long porque será mayor que +32.767 (tipo integer).

La operación kk = 10000*12 para nosotros es perfectamente válida, pero sorprendentemente para VB6 no lo es. La razón es que para VB6 la operación es esto:

Long = Integer(integer*integer)

Como el resultado de integer*integer se amacena temporalmente en un integer genera un error de desbordamiento (el número es mayor que +32.767).

La solución es:

Long = Long(Long*integer)

Si el primer número de la multiplicación es un long el resultado intermedio será un long, y se consigue con:

kk = CLng(10000)*12

Espero haberos ayudado a ambos a entender mejor como "piensa" VB6, para que la próxima vez que salga dicho error sea sencillo solucionarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crei que sabia algo de VB....

Publicado por Diego (211 intervenciones) el 06/12/2008 22:40:02
Joder, Igor. Me he quedado con los dedos sobre el teclado. Iba a contestar pero es imposible hacerlo mas claro e inteligible.
Yo le pensaba decir que declarando dos variables y luego asignando el resultado al textbox o lo que sea, se evita lo que tu dices, y el error de desbordamiento.

kk=10000
rekk=12
textbo1=kk*rekk

De la forma que tu describes, no lo he probado pero seguro que funciona.

Espero que nuestro amigo salga del agujero de donde estaba e incluso acabe cambiandose el nick.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crei que sabia algo de VB....

Publicado por igor (633 intervenciones) el 07/12/2008 00:53:19
Es gratificante ver que aprendeis de mis aportaciones, a veces parece que soy algo así como un loco excentrico que habla en otra lengua.

Este tipo de errores nadie te los explica, simplemente llega el día que te dás cuenta que bajo el código que escribes se genera código que no vemos (vease ensamblador) y que explica incoherencias como esta.

Este tipo de cosas justifican lo que muchos dicen, que un buen programador termina programando en C. En ese lenguaje el programador tiene el control para bien o para mal.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crei que sabia algo de VB....

Publicado por Jose (3 intervenciones) el 07/12/2008 17:53:59
Jejeje...ya he cambiado de nick, Diego. Cuando me decidí a preguntar, estaba tan frustrado que no se me ocurrio otro
Aunque sigo de cerca lo que se cuece en el foro, no suelo participar. sobre todo porque poco podria aportar.

Gracias Igor. No solo me has solucionado el problema, sino que me has explicado el origen del error. Llevo bastante tiempò con VB, y la verdad me sentí impotente cuando una linea tan simple y logica me impedia seguir.

Gracias y hasta siempre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar