Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Referencias Circulares
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Referencias Circulares 
 
Hola amigos.

Tengo un pequeño problema que no se si es u problema. He creado un clase que maneja las funciones basicas de mantenimiento de una tabla de B.D. y al instanciarla, le paso el formulario que la contiene como parametro asi

PUBLIC SUB Form_Open()

  ME.Center
  ME.Show
  cAutor = NEW cData(ME)
  obsCommon = NEW Observer(txtnomaut) AS "obstxt"

END

y en la clase en cuestion (cData) la recibe asi

PUBLIC SUB _new(sfrm AS Form)

DIM sTblFld AS String[]
DIM msj AS String
DIM op AS Integer
  IF frmIsopen(sfrm) THEN
    frm = sfrm
  ENDIF
  hCon = db.Current
  'Tomamos la tabla y el campo clave id principal (primary key)
  IF frm.Tag THEN
    sTblFld = Split(frm.Tag, ".")
    IF sTblFld.Count < 2 THEN
      Message.Error("Faltan argumentos tabla y/o campo clave principal")
      frm.Close
         .....    y sigue
El problema es que al copiar el parametro sfrm en la variable publica parece que se establece la ref. circular. El programa funciona pero al salir
me dice ....

WARNING: circular references detected
cData (1)
frmautor (1)
WARNING: 84 allocation(s) non freed.

Es un problema o puede funcionar asi y no pasa nada? - Supongo que algo hago mal.

Gracias
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Referencias Circulares 
 
No entiendo la razón de esto:
IF frmIsopen(sfrm) THEN
frm = sfrm
ENDIF

Si estás ahí es porque has instanciado y has pasado como parámetro el formulario por tanto no entiendo que te preguntes si está abierto. Directamente puedes dejarlo con el frm=sfrm. Creo que el error circular lo creas en frmisopen.

Otra cosa que veo mal es que en _new cierras el formulario que lo instanció. No veo eso bien. Una cosa es que funcione (que funcionará) y otra que eso esté bien estructurado. Lo que debería pasar es que si faltaban parámetros hagas pongas un tag en frm y luego un me.close. Así cierras el hijo y vuelves a estar en el padre donde faltaban parámetros.

Creo que con eso te funcionará sin problemas.

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Referencias Circulares 
 
Tienes toda la razon, al decir lo del diseño. He pensado en una funcion, que pase a un modulo, que luego fue una clase ....
Gracias, hay cosas que no se pueden hacer al vuelo, no obstante lo de las referencias circulares en parte se ha resuelto, eliminando la variable de clase (cDatos = NULL) al salir del formulario que hace uso de ella. Creia que estaba solucionado y en una de las salidas del programa volvi a recibir es mensaje

WARNING: 10 allocation(s) non freed.

Esta vez bastantes menos, pero no se de donde.

Gracias de todos modos.
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿Cómo Depurar Las Referencias Circulares? shordi General 6 Jueves, 29 Octobre 2009, 21:24 Ver último mensaje
maikl
No hay nuevos mensajes Tipos Por Valor Y Tipos Por Referencias Shell General 2 Viernes, 26 Octobre 2012, 05:18 Ver último mensaje
fabianfv
No hay nuevos mensajes Referencias, Colecciones, Contenedores Y L... shordi General 0 Miercoles, 26 Febrero 2014, 18:28 Ver último mensaje
shordi
No hay nuevos mensajes POO. Referencias. Reducir Código En Formu... Shell General 3 Lunes, 04 Diciembre 2017, 21:06 Ver último mensaje
jsbsan
 

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



  

 

cron