[Solucionado] Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos


Objetivo: [Solucionado] Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos
Quería consultar sobre este mensaje, el cual me arroja el compilador justo cuando cierro mi aplicación me aparece este mensaje en mi clase CDB. Estuve averiguando por Internet algunos dicen que es un problema de gambas actualmente estoy usando la versión 2.99.1. Adjunto el mensaje y mi código de esta clase.

Mensaje :

gbx3: warning: circular references detected:
gbx3: 1 CDB
gbx3: warning: 19 allocation(s) non freed.

Codigo :


Inherits Connection

Private $hRes As Result

Public Procedure connect_on() As Connection

Try Me.Close
Try Me.Open
If Error Then
Message.Error(Subst(MMesgTitle.MERR_001, DConv$(Error.Text)) & "\n KRC finalizará ahora.")
Quit
End If

End

Public Procedure connect_off() As Connection

Try Me.Close()
If Error Then Message.Error(MMesgTitle.MERR_011)

End

Public Function statement(Optional sQuery As String, Optional sMode_stat As String, Optional sTable As String, Optional sField As String, Optional sParam As String) As Result

If Not sMode_stat Then sMode_stat = "QUE"

Select Case sMode_stat
Case "QUE"
conection_query(sQuery)
Case "INS"
conection_insert(sTable, sField, sParam)
Case "DEL"
conection_delete(sTable, sField)
End Select

Try Return $hRes

End

Public Function unique_field(sTable As String, sParam As String) As Result

If sTable And sParam Then $hRes = Me.Find(sTable, sParam)
Return $hRes

End

Public Function load_combobox(cmb As ComboBox, sQuery As String, sField_1 As String, Optional sField_2 As String)

cmb.Tag = New Variant[]
If Not sQuery Or Not cmb Or Not sField_1 Then Message.Error(MMesgTitle.MERR_006)
$hRes = Me.Exec(sQuery)
cmb.Add("", 0)
cmb.Tag.Add("")
Do While $hRes.Available
cmb.Add($hRes[sField_1])
cmb.Tag.Add($hRes[sField_2])
$hRes.MoveNext
Loop

End

Public Function load_listbox(lbx As ListBox, sQuery As String, Optional sParam1 As String, Optional sParam2 As String)

If Not sQuery Then
Message.Error(MMesgTitle.MERR_006)
Endif
$hRes = Me.Exec(sQuery)
Do While $hRes.Available
lbx.Add($hRes[sParam1], $hRes[sParam2])
$hRes.MoveNext()
Loop

End

Private Procedure conection_query(sQuery As String) As Result

If Not sQuery Then
Message.Error(MMesgTitle.MERR_006)
Return $hRes
Endif
$hRes = Me.Exec(sQuery)
Catch
Me.connect_on()
Try $hRes = Me.Exec(sQuery)
check_error()

End

Private Procedure conection_insert(sTable As String, Optional sField As String, sParam As String) As Result
Dim sQuery_ins As String

If Not sTable Or Not sParam Then
Message.Error(MMesgTitle.MERR_006)
Return $hRes
Endif
If Not IsNull(sField) Then
sQuery_ins = Subst$("INSERT (&1) INTO &2 VALUES(&3)", sField, sTable, sParam)
Else
sQuery_ins = Subst$("INSERT INTO &1 VALUES(&2)", sTable, sParam)
Endif
$hRes = Me.Exec(sQuery_ins)
If $hRes.Count < 0 Then Message.Error(MMesgTitle.MERR_002)

Try
Message.Info(MMesgTitle.MINF_001, "Aceptar")
Catch
Me.connect_on()
Try $hRes = Me.Exec(sQuery_ins)
check_error()

End

Private Procedure conection_delete(sTable As String, sField As String) As Result

Me.Delete(sTable, sField)
Catch
Me.connect_on()
Try Me.Delete(sTable, sField)
check_error()

End

Private Function check_error() As Result

If Error Then
Message.Error(Subst(MMesgTitle.MERR_005, Error.Text))
Return $hres
Endif

End


última edición por gara_pm el Lunes, 26 Diciembre 2011, 23:22; editado 1 vez
Perfil MP  
Objetivo: Re: Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos
Un mensaje de error indicando referencias circulares te señala que hay un error lógico en tu código (técnicamente sería posible que un error de este tipo se produzca en el código de gambas, pero en la práctica es casi imposible que a Benoit se le escape algo así).

El error se produce porque gambas no puede liberar la memoria ocupada por dos objetos porque ellos se referencian en forma mutua (gambas elimina un objeto de la memoria cuando ya no queda ninguna variable de referencia apuntando a tal objeto).

En tu código es probable que el problema provenga de que guardas un objeto Result en la propiedad Tag de un Combo. Así que deberías tener especial cuidado de eliminar la referencia al objeto Result de a propiedad Tag del combo, cuando el objeto Result ya no sea necesario.

Pero no te lo puedo asegurar porque en necesario revisar también el código que interactúa con los objetos CDB, así que tal vez el problema esté en otro lugar del código.

Happy debugging !!!

Objetivo: Re: Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos
Gracias Fabian por responder mi consulta, con respecto a lo mencionado el problema podria generarse en el result del tag como tenia problema con los valores index de este combobox decidi usar esa opción, en todo caso cuando llegue a mi casa subire mi codigo y aprovechare de revisar.

Perfil MP  
Objetivo: Re: Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos
Fabian adjunto el código fuente del proyecto yo tratare de atrapar el warning, de antemano gracias por la ayuda.

proyecto krc

Perfil MP  
Objetivo: Re: [Solucionado] Mensaje Warning: Circular References Detected En Mi Clase De Coneccion De Base Datos
Solucione el el problema del warning y fue exactamente lo que fabian expuso en un comentario era que no limpiaba una variable de resultado al termina la aplicación, por lo cual agregue una linea en el método connect_off() el cual cierra la conexión al base de datos.

$hres = null


PD: Gracias por la ayuda.

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.1855s (PHP: 17% SQL: 83%)
Consultas SQL: 24 - Debug off - GZIP Activado