Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Error "Null Object" Al Tratar De Ejecutar FormularioX.Show
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
PUBLIC SUB Button2_Click()
Dim F as new EstadoDeCliente
F.Show
END


 

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
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Error "Null Object" Al Tratar De Ejecutar FormularioX.Show 
 
drjuano escribió:  
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í:
PUBLIC SUB Button2_Click()
DIM bt AS String
  TRY EstadoDeCliente.Show

  IF ERROR THEN
    PRINT Error.Text
    PRINT Error.Where

    FOR EACH bt IN Error.Backtrace
      PRINT bt
    NEXT

  ENDIF
END

 


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 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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
No puede descargar archivos
No puede publicar eventos en el calendario