|
Página 1 de 2
|
Problema Con Control De Errores Y Return En Una Función
Autor |
Mensaje |
Harpo
Usuario
Registrado: Enero 2014
Mensajes: 13
Edad: 40 Ubicación:
|
Problema Con Control De Errores Y Return En Una Función
Saludos al foro, aprovechando la cuarentena he retomado gambas y me he encontrado con un problema al que no encuentro una solución elegante.
Me explico, una función que realiza la carga de un componente (treeview, gridview, columnview) a partir de los datos de una base de datos. En el caso de que todo sea correcto retorna TRUE y sino FALSE.
Para controlar errores de programación utilizo Finally-Catch y además una variable boolean para controlar lógica de programa.
La función sería algo parecido a esto:
El problema está en que, aunque no haya ningún error de programación dentro de la función, cuando llega a la linea: "If Error.Code <= 0 Then Return bControl" si existe un error heredado.
Viene de un "Try" del control TreeView, con debug obtengo:
Error: 13: Null object
Módulo: _TreeView_Item._AddChild.136
No se me ocurre más alternativa que, o bien incluir justo antes del "Finally" un Error.Clear(). Asumiendo que si llega hasta ahí la ejecución no hay error de programación. O parchear el código de los controles para limpiar los errores generados por "Try" y volver a construirlos. Ninguna de las dos me convence al 100%.
Subo una pequeña aplicación donde se ve el problema, tiene un control TreeView a la izquierda donde carga Autonomías-Provincias de España desde una base de datos SQLite. Cuando se selecciona una provincia carga un ColumnView con Poblaciones-Codigos postales-Direcciones. La función de carga del TreeView limpia el error del control antes del "Finally", la función de carga del ColumnView no, por tanto el "return" por defecto es False.
Estoy usando gambas 3.14.3. Cualquier sugerencia es bienvenida y gracias de antemano.
Un saludo. H.
Programa ejemplo:
Descripción: |
Visualizar Codigos postales |
Descargar |
Nombre del archivo: |
CodPostal.zip |
Tamaño: |
493.52 KB |
Descargado: |
103 veces |
Descripción: |
Visualizar Codigos postales |
Descargar |
Nombre del archivo: |
CodPostal.zip |
Tamaño: |
493.52 KB |
Descargado: |
103 veces |
Descripción: |
Visualizar Codigos postales |
Descargar |
Nombre del archivo: |
CodPostal.zip |
Tamaño: |
493.52 KB |
Descargado: |
103 veces |
|
#1 Domingo, 26 Abril 2020, 13:30 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Problema Con Control De Errores Y Return En Una Función
podrías hacer un video con el error y subirlo?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#2 Domingo, 26 Abril 2020, 13:35 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Problema Con Control De Errores Y Return En Una Función
a ti te sale esta ventana en el error?
el error lo tira en esta zona:
FMain.CargaColumnView.232: 13: Null object
FMain.CargaColumnView.233: _TreeView_Item._AddChild.136
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
última edición por v3ctor el Domingo, 26 Abril 2020, 13:45; editado 1 vez
|
#3 Domingo, 26 Abril 2020, 13:43 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Problema Con Control De Errores Y Return En Una Función
comenta todo el código de finality, y purga el error que hay primero
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#4 Domingo, 26 Abril 2020, 13:51 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Problema Con Control De Errores Y Return En Una Función
comente todas las lineas de finality y tira error: null key
arregla eso primero
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#5 Domingo, 26 Abril 2020, 13:56 |
|
|
Harpo
Usuario
Registrado: Enero 2014
Mensajes: 13
Edad: 40 Ubicación:
|
Re: Problema Con Control De Errores Y Return En Una Función
v3ctor escribió: a ti te sale esta ventana en el error?
el error lo tira en esta zona:
FMain.CargaColumnView.232: 13: Null object
FMain.CargaColumnView.233: _TreeView_Item._AddChild.136
Gracias por tu interés Victor, esa ventana se produce al no devolver nada la función y por tanto toma valor por defecto: False. El mensaje lo lanza el evento Select del Treeview. El error "13: Null object" se produce internamente en el ColumnView, no en el programa ejemplo. Es el problema que señalo, un error que se produce internamente en un control y que "hereda" la aplicación que lo usa.
|
#6 Domingo, 26 Abril 2020, 15:22 |
|
|
Harpo
Usuario
Registrado: Enero 2014
Mensajes: 13
Edad: 40 Ubicación:
|
Re: Problema Con Control De Errores Y Return En Una Función
v3ctor escribió: comente todas las lineas de finality y tira error: null key
arregla eso primero
Mis disculpas, hice todas las pruebas con una base de datos completa, para subir el programa tuve que eliminar muchos datos.
Para subsanar el error basta cambiar la linea 144: If hResult then
por: If hResult.Available Then
Gracias por tu interés!
|
#7 Domingo, 26 Abril 2020, 15:33 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Problema Con Control De Errores Y Return En Una Función
Hola Harpo.
El error sucede porque se levanta el evento treeview1_select() antes que el treeview tenga elementos, de ahi el null.
La solución es usar unas banderas, por ejemplo cargado = true una vez que cargaste el treeview y en el evento treeview_select pones un condicional
IF cargado = true then
Saludos.
|
#8 Domingo, 26 Abril 2020, 15:50 |
|
|
Harpo
Usuario
Registrado: Enero 2014
Mensajes: 13
Edad: 40 Ubicación:
|
Re: Problema Con Control De Errores Y Return En Una Función
tincho escribió: Hola Harpo.
El error sucede porque se levanta el evento treeview1_select() antes que el treeview tenga elementos, de ahi el null.
La solución es usar unas banderas, por ejemplo cargado = true una vez que cargaste el treeview y en el evento treeview_select pones un condicional
IF cargado = true then
Saludos.
Hola y gracias por la respuesta.
No veo lo que comentas. El evento TreeView1_Select() se dispara por primera vez al asignar: Key = "*" en el proceso de carga, y en el evento se controla que si TreeView.count = 1 no continue.
He probado a poner una bandera (bCargando = True) y no afecta
Por otro lado el error que existe al final del proceso de carga es: 13 - Null Object. en _TreeView_Item._AddChild.136
En el código fuente del control TreeView:
El error que aparece en mi programa ejemplo viene del "Try" del código fuente anterior en el control TreeView. Probé a depurar el ejemplo que viene el código fuente de gambas y efectivamente da error "Null Object", intenta incrementar el contador de nodos hijos (_GrandChildren) del nodo padre del que estamos insertando (_GetParentItem(Me)) en el TreeView (GetTree()). Y lo hace solo para el primer nodo ($aChildren.Count = 1) que es el nodo Root y no tiene padre. De ahí el nulo. Si se comenta la linea del "Try" el control TreeView funciona perfectamente.
Quizá en este ejemplo se vea más claro que error es del control TreeView.
Descripción: |
|
Descargar |
Nombre del archivo: |
CargaTreeView.zip |
Tamaño: |
15.05 KB |
Descargado: |
95 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
CargaTreeView.zip |
Tamaño: |
15.05 KB |
Descargado: |
95 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
CargaTreeView.zip |
Tamaño: |
15.05 KB |
Descargado: |
95 veces |
|
#9 Domingo, 26 Abril 2020, 17:16 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Problema Con Control De Errores Y Return En Una Función
Hay que comprobar si hay error (si no es null) antes de poder ver si es > 0.
Public Sub btCargar_Click()
With TreeView1
.Add("*", "Nodo Root")
.Add("Child1", "Hijo 1",, "*")
.Add("Child1-1", "Sub Hijo 1-1",, "Child1")
.Add("Child1-2", "Sub Hijo 1-2",, "Child1")
.Add("Child1-3", "Sub Hijo 1-3",, "Child1")
.Add("Child1-4", "Sub Hijo 1-4",, "Child1")
.Add("Child2", "Hijo 2",, "*")
.Add("Child2-1", "Sub Hijo 2-1",, "Child2")
.Add("Child2-2", "Sub Hijo 2-2",, "Child2")
.Add("Child2-3", "Sub Hijo 2-3",, "Child2")
.Add("Child2-4", "Sub Hijo 2-4",, "Child2")
End With
Finally
If Error Then ' Agregue esto a tu código
If Error.Code > 0 Then
Message.Info("Error: " & Error.Text & gb.CrLf & "Módulo: " & Error.Where)
Endif
Endif ' Agregue esto a tu código
Catch
Message.Error("Errorx: " & Error.Text & gb.CrLf & "Módulo: " & Error.Where)
End
Public Sub btSalir_Click()
Me.Close()
End
Saludos.
|
#10 Domingo, 26 Abril 2020, 17:27 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados 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
|
|
|
|
|