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:
Private Function CargaTreeView() As Boolean
'Realiza la carga del TreeView
Dim hResult As Result
Dim sSql As String
Dim bControl As Boolean = True
'Abrimos base de datos.
If Not hConn.Opened Then hConn.Open()
'Sentencia SQL
sSql = "SELECT * FROM Tabla "
hResult = hConn.Exec(sSql)
'Cargamos resultado
If hResult Then
'Proceso de carga del control
Else
'Si no hay datos no hay carga
bControl = False
Endif
Finally
hConn.Close()
hResult = Null
If Error.Code <= 0 Then Return bControl
Catch
'Control de errores
Message.Error("Error: " & Error.Text & gb.CrLf & "Módulo: " & Error.Where)
Return False
End
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: