|
Página 1 de 1
|
Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Autor |
Mensaje |
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Hola a todos:
Hace una semana decidí empezar a aprender un poco de programación. Si bien no me dedico a ésto, creo que puede resultar útil, además de un pasatiempos atrapante.
Quisiera, antes de explicar mi problema, pedir disculpas por la intromisión al mundo de la programación y los errores tontos que pueda llegar a cometer, ya sea tratando de explicar mi problema así como escribiendo un programa. También quisiera darle las gracias de antemano a quienes puedan facilitarme algo de ayuda, asi como a todos aquellos que publicaron algo en éste sitio del cual he obtenido mucha información.
En cuanto a buscar en Google, quisiera hacerles saber que he realizado durante algunos dias busquedas muy exhaustivas con respecto al error, de lo contrario no estaría aquí explicando mi situación. Tal vez no haya tenido la perspicacia o el conocimiento sobre a qué prestarle atención exactamente. También pido disculpas si he tratado de ver mucho el árbol y no ver el bosque.
El adjunto que coloco en éste tema es el programa que intento crear.
Mi programa intenta ser un administrador de cuentas corrientes para un negocio cualquiera. Se ingresan clientes y se registran deudas o pagos realizados.
Mi problema está en el formulario "ListarClientes". Al hacer click en el botón que abre "EstadoDeCliente" obtengo un error:
Código de "ListarClientes":
PUBLIC SUB Button2_Click()
EstadoDeCliente.Show
END
Al ejecutarlo, obtengo el siguiente error:
Null Object
Al marcarlo, obtengo un globo que dice:
Type Mismatch: Wanted variant, got Function Instead
No comprendo porqué Variant en lugar de Function.
Desde ya, gracias por su tiempo y buena voluntad.
Aquí dejo una captura del boton que presiono cuando se produce el error:
http://img217.imageshack.us/content...antallazoza.png
Descripción: |
|
Descargar |
Nombre del archivo: |
CuentasCorrientes.tar.gz |
Tamaño: |
21.22 KB |
Descargado: |
72 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
CuentasCorrientes.tar.gz |
Tamaño: |
21.22 KB |
Descargado: |
72 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
CuentasCorrientes.tar.gz |
Tamaño: |
21.22 KB |
Descargado: |
72 veces |
|
#1 Martes, 08 Marzo 2011, 21:15 |
|
|
ljma
Programador
Registrado: Enero 2010
Mensajes: 106
Edad: 54 Ubicación:
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Hola,
¿Qué versión de gambas usas? No te debería dar ningún error al cargar el formulario puesto que no ejecutas ningún código al cargarlo. Usa los puntos de interrupción y con F8 recorre el código linea a linea observando los saltos, los valores que toman las variables, etc,
Saludos y suerte
|
#2 Miercoles, 09 Marzo 2011, 00:03 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
ljma:
La versión que uso es la 2.21 en Debian Squeeze de 64 bits. Voy a jugar con los puntos de interrupción. Gracias por tu ayuda.
|
#3 Miercoles, 09 Marzo 2011, 02:08 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Olvidé algo:
Por otro lado, el formulario que no me muestra es el que contiene un Dataview y un Datasource.
Casualmente, el otro formulario que contiene un dataview y un datasource también me hacía lo mismo, pero cuando lo cargaba después de haber presionado el boton que carga los otros formularios. La manera en que lo arreglé (atado con alambre) fue colocar en SUB del formulario principal la sentencia:
Listarclientes.show
listarclientes.hide
De ésa manera ListarClientes carga correctamente luego de ejecutar otros formularios.
Estoy seguro que es un tema con el dataview o datasource, ya que son ésos dos los que me hacen el problema. Ahora tengo el siguiente error en la consola:
WARNING: circular references detected
EstadoDeCliente (1)
ListarClientes (1)
Principal (1)
DataTable (1)
DataView (2)
DataSource (2)
WARNING: 72 allocation(s) non freed.
Gracias por su tiempo.
|
#4 Miercoles, 09 Marzo 2011, 02:19 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Citar: La versión que uso es la 2.21 en Debian Squeeze
ahhh otro debianita!!!
Ten cuidado que este sitio está lleno de ubunteros y si te descuidas te contaminan ¡Gente de poco fiar!
bueno al tajo
Citar: PUBLIC SUB Button2_Click()
EstadoDeCliente.Show
END
Y dices que esto te da null object. Dado que acabas de empezar creo que has cometido un error básico y es no instanciar el formulario.
Prueba esto
Lo de las referencias circulares es lo que pasa cuando te haces un lio. Por ejemplo abres un formulario A que abre un formulario B y en este B en determinado caso en vez de volver al A anterior vuelves a abrir un nuevo A. Es que te has hecho un lio porque eso no debe pasar nunca. Hay un razonamiento erróneo detras de una referencia circular.
Un saludo
|
#5 Miercoles, 09 Marzo 2011, 05:45 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Soplo:
Muchísimas gracias por tu información. Te cuento los avances:
Pues el problema de instanciar ya está resuelto. Sin embargo, el error al querer abrir EstadoDeCliente sigue estando. Es como si no estuviera. He realizado algunas pruebas:
El formulario, vacio, lo abre perfectamente. Cuando le coloco un DataSource y un DataView es cuando me arroja el resultado. Supongo que tiene algo que ver con el formulario "padre" que también tiene un DataSource o DataView. Desafortunadamente, todavía no doy con algo que explique bien el manejo de ésos dos controles. Si se te ocurre algo, estaría aún más agradecido. Mientras tanto, sigo buscando y probando. Saludos.
PD: Debian es el mejor sistema operativo.
|
#6 Jueves, 10 Marzo 2011, 18:58 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Lo que contanga cada formulario no tiene nada que ver. que contenga unos controles u otros o nada o todo da igual. el formulario se muestra o no se muestra.
Si tu pones formulario.show y el formulario.show te dice null object es porque no se puede cargar. Bien porque no está instanciado, bien porque al instanciarse tiene algún problema que le echa para atrás. Podría ser por ejemplo si has utilizado un métoco _new y has cometido un error. En ese caso el método _new casca y como ese método es el que se ejecuta para instanciarse ya no se instancia.
un saludo debianero
|
#7 Jueves, 10 Marzo 2011, 19:09 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Hola a todos:
Mi problema está en el formulario "ListarClientes". Al hacer click en el botón que abre "EstadoDeCliente" obtengo un error:
Código de "ListarClientes":
PUBLIC SUB Button2_Click()
EstadoDeCliente.Show
END
Al ejecutarlo, obtengo el siguiente error:
Null Object
Al marcarlo, obtengo un globo que dice:
Type Mismatch: Wanted variant, got Function Instead
No comprendo porqué Variant en lugar de Function.
Vamos por parte:
Null Object: se intenta acceder a un objeto por medio de una variable que vale NULL (tal objeto no existe).
Type Mismatch: Wanted variant, got Function Instead: se llamó a un método (función) que debe devolver un variant, pero se obtuvo Function. Esto pasa típicamente cuando se escribe la llamada a la función y se olvida colocar los paréntesis de apertura y cierre. Ejemplo:
PUBLIC FUNCTION hazAlgo() AS Variant
...
END
...
DIM unaVariable AS Variant
'Genera el error Wanted variant, got Function Instead.
unaVariable = hazAlgo
'Lo correcto es
unaVariable = hazAlgo()
Ahora bien, puede que sea un error en tu código o en gambas o un error en la configuración de los controles o cualquier combinación.
La instanciación del formulario no tiene nada que ver en este caso ya que para cada formulario que diseñas mediante el IDE de gambas, en tiempo de ejecución el intérprete crea una instancia de forma automática la primera vez que referencias ese formulario en tu código.
Con el manejador del evento Click de Button2 modificado así:
El backtrace del error es este:
Citar:
DataView.RefreshColumns.62
DataView.Columns_Write.178
EstadoDeCliente.$load.59
EstadoDeCliente.EstadoDeCliente.0
ListarClientes.Button2_Click.84
Lo que contiene el formulario es importante porque durante su carga se crean todos los controles que contiene y si la configuración de estos controles es errónea porque les das valores que no esperan mediante código o mediante el diseñador de formularios puede que, como en este caso, se genere una excepción que interrumpe la carga de tu formulario porque el intérprete no encontró ninguna rutina de manejo de errores en todo el stack.
A partir de aquí lo que hay que hacer es revisar tu código para ver si hay errores de configuración de los controles que contiene el formulario e invertir un poco de tiempo en rastrear el error hacia el código de gambas.
Como se ve en el backtrace la excepción se produce en la línea 62 del método RefreshColumns en la clase DataView. Mirar esa línea daría una pista que puede ser importante para entender por qué se produce el error.
Hasta acá llego yo porque no tengo más tiempo hasta la semana próxima, si alguien quiere tomar la posta que así sea (¿ayortano?).
Saludos cordiales.
=================== Cómo programar con Gambas
Speed Books: informática libre.
última edición por fabianfv el Viernes, 11 Marzo 2011, 03:53; editado 1 vez
|
#8 Viernes, 11 Marzo 2011, 03:50 |
|
|
drjuano
Aprendiz
Registrado: Marzo 2011
Mensajes: 69
Edad: 42
|
Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Hola a todos, gracias por su tiempo. Bueno, de la experiencia de programar una primera aplicación he obtenido gran conocimiento enriquecedor. La información que me han dado ha sido muy útil, especialmente cuando me decian "tenes mal pensado el programa" (aunque no con ésas palabras) eso era exactamente lo que me pasaba.)
Bueno, lo reescribí de cero y ahora tengo algo para mostrarles, si alguien lo quiere probar, modificar etc. estaría muy satisfecho. Algunas conclusiones:
En el codigo anterior abria una conexión por cada formulario y no cerraba las anteriores. Éso no es muy práctico y propenso a errores, asi que buscando encontré que lo mejor es crear un módulo de inicio y especificar la conexión ahí. Después no hay que llamarla más. Éso fue crucial para que ya no me dieran más los errores que planteé. Si alguno llega por el buscador con lo mismo se dará cuenta leyendo ésto que el orden y la simplicdad son cruciales.
A pesar de que hay documentación en la web, creo que es algo poca. Especialmente en lo que respecta al componente de acceso a base de datos (gb.db).
Bueno, gracias y están invitados a ver el programa.
Otra cosa: lo único que había visto de programación de manera "formal" fue usar qbasic en la escuela. Así que, después de tantos años, hay mucha cosa nueva por descubrir. Por ahora no tengo mucho tiempo, pero en los ratos libres segurié aprendiendo.
Descripción: |
CuentasCorrientes2, mi ejercicio de programación. El tar contiene un paquete con el codigo fuente y otro con los generados para Debian. |
Descargar |
Nombre del archivo: |
CuentasCorrientes2.tar |
Tamaño: |
70 KB |
Descargado: |
74 veces |
Descripción: |
CuentasCorrientes2, mi ejercicio de programación. El tar contiene un paquete con el codigo fuente y otro con los generados para Debian. |
Descargar |
Nombre del archivo: |
CuentasCorrientes2.tar |
Tamaño: |
70 KB |
Descargado: |
74 veces |
Descripción: |
CuentasCorrientes2, mi ejercicio de programación. El tar contiene un paquete con el codigo fuente y otro con los generados para Debian. |
Descargar |
Nombre del archivo: |
CuentasCorrientes2.tar |
Tamaño: |
70 KB |
Descargado: |
74 veces |
|
#9 Lunes, 14 Marzo 2011, 00:00 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|