Referencias Circulares


Objetivo: 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

Perfil MP  
Objetivo: 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.


Perfil MP  
Objetivo: 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.

Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.3899s (PHP: -82% SQL: 182%)
Consultas SQL: 45 - Debug off - GZIP Activado