Una de las preguntas mas frecuentes que veo de los que empiezan con gambas es de como crear informes de las consultas realizadas a bases de datos de una manera rápida.
Existe un componente, el gb.report, que realiza esta misión, aunque aun esta en desarrollo, y se supone que en la versión 3.1 ya vendrá más optimizado.
Yo me he hecho una clase que genera un informe "rápido" en formato .html, pudiendose indicar colores de filas pares/impares, campos y el titulo.
Este informe lo podemos editar con cualquier programa de procesamiento de texto para terminar de darle forma al informe o publicar / imprimir directamente.
Lo mejor que tiene es que con solo pasarle el "result" de una consulta, el automaticamente detecta el nombre de las columnas y escribe completa la tabla (titulo, y filas de distinto color, segun le hayamos indicados).
Os dejo aqui el resultado que se puede obtener.
La forma de usar la clase es la siguiente:
0 º Definimos varias variables que vamos a usar...
1º Conectamos a la base de datos (en este caso una sqlite, con nombre "pruebasBD"):
2º Obtenemos el resultado de una consulta: (resultado)
'definos colores y titular
inf_html.titulo = "<h3>2 Ejemplo de resultado de la consulta:</h3> <br>" & sentenciaSql
'para ver colores en hexadecimal para hmtl: http://es.wikipedia.org/wiki/Colores_HTML
inf_html.nombretablas = False ' si nombretabla es false, no se escribe el nombre de la tabla, si es true se escribe el nombre de la tabla
inf_html.ColorCampos = "#7B68EE"
inf_html.ColorFondoImpar = "#FFA07A"
inf_html.ColorFondoPar = "#D3D3D3"
'genero el codigo html del resultado (y con &= lo añado al anteriormente creado)
textohtml &= inf_html.crea(resultado)
Existe un componente, el gb.report, que realiza esta misión, aunque aun esta en desarrollo, y se supone que en la versión 3.1 ya vendrá más optimizado.
Yo me he hecho una clase que genera un informe "rápido" en formato .html, pudiendose indicar colores de filas pares/impares, campos y el titulo.
Este informe lo podemos editar con cualquier programa de procesamiento de texto para terminar de darle forma al informe o publicar / imprimir directamente.
Lo mejor que tiene es que con solo pasarle el "result" de una consulta, el automaticamente detecta el nombre de las columnas y escribe completa la tabla (titulo, y filas de distinto color, segun le hayamos indicados).
Os dejo aqui el resultado que se puede obtener.
La forma de usar la clase es la siguiente:
0 º Definimos varias variables que vamos a usar...
Private conexion As Connection
Private resultado As Result
Private resultado As Result
Private inf_html As New InformeHtml 'clase que genera el informe de la base de datos
1º Conectamos a la base de datos (en este caso una sqlite, con nombre "pruebasBD"):
conexion = New Connection
conexion.type = "sqlite3"
conexion.host = User.home
conexion.name = "pruebasBD"
conexion.type = "sqlite3"
conexion.host = User.home
conexion.name = "pruebasBD"
2º Obtenemos el resultado de una consulta: (resultado)
sentenciaSql = "Select nombre,estrellas from hotel"
resultado = Conexion.Exec(sentenciaSql)
3º Definimos las caracteristicas de la instancia a la clase informeHtmlresultado = Conexion.Exec(sentenciaSql)
'definos colores y titular
inf_html.titulo = "<h3>2 Ejemplo de resultado de la consulta:</h3> <br>" & sentenciaSql
'para ver colores en hexadecimal para hmtl: http://es.wikipedia.org/wiki/Colores_HTML
inf_html.nombretablas = False ' si nombretabla es false, no se escribe el nombre de la tabla, si es true se escribe el nombre de la tabla
inf_html.ColorCampos = "#7B68EE"
inf_html.ColorFondoImpar = "#FFA07A"
inf_html.ColorFondoPar = "#D3D3D3"
'genero el codigo html del resultado (y con &= lo añado al anteriormente creado)
textohtml &= inf_html.crea(resultado)
La variable textohtml contiene el codigo de la tabla, este lo podemos ver o editar en navegador o procesador de texto.
Os dejo tambien como es la clase informehtml:
' Gambas class file
Public nombretablas As Boolean 'si es true se escribe el nombre de la table, si es false, se escribe solo el nombre del campo
Public titulo As String 'titulo superior de la tabla resultante
Public ColorCampos As String 'color de los campos
Public ColorFondoPar As String 'color fondo filas pares
Public ColorFondoImpar As String 'colo fondo filas impares
Public Function Crea(resultados As Result) As String
Dim devuelve As String
Dim campo As New String[]
Dim hfield As ResultField
Dim a As Integer
Dim contador As Integer
Dim nombrecampo As String
Dim campotemp As String
devuelve = " <table border=\"2\">\n"
devuelve &= "<caption>" & Me.titulo & "</caption>\n"
devuelve &= "<tr>\n"
'escribe los campos
For Each hField In resultados.Fields
If nombretablas = True Then
nombrecampo = Str$(hfield.name)
Else
campotemp = Str$(hfield.name)
nombrecampo = Mid$(campotemp, RInStr(campotemp, ".") + 1, Len(campotemp))
Endif
devuelve &= "<th bgcolor=\"" & colorcampos & "\" scope=\"col\">" & nombrecampo & "</th>"
campo.add(Str$(hfield.name))
Next
devuelve &= "</tr>\n"
'escribir los datos
Do While resultados.available
contador += 1
If (Int(contador / 2) * 2) = contador Then
'es par
devuelve &= "<tr bgcolor=\"" & ColorFondoPar & "\">"
Else
devuelve &= "<tr bgcolor=\"" & ColorFondoImpar & "\">"
Endif
For a = 0 To campo.count - 1
devuelve &= "<td>" & resultados[campo[a]] & "</td>"
Next
devuelve &= "</tr>"
resultados.MoveNext
Loop
devuelve &= "</table>"
Return devuelve
End
Public nombretablas As Boolean 'si es true se escribe el nombre de la table, si es false, se escribe solo el nombre del campo
Public titulo As String 'titulo superior de la tabla resultante
Public ColorCampos As String 'color de los campos
Public ColorFondoPar As String 'color fondo filas pares
Public ColorFondoImpar As String 'colo fondo filas impares
Public Function Crea(resultados As Result) As String
Dim devuelve As String
Dim campo As New String[]
Dim hfield As ResultField
Dim a As Integer
Dim contador As Integer
Dim nombrecampo As String
Dim campotemp As String
devuelve = " <table border=\"2\">\n"
devuelve &= "<caption>" & Me.titulo & "</caption>\n"
devuelve &= "<tr>\n"
'escribe los campos
For Each hField In resultados.Fields
If nombretablas = True Then
nombrecampo = Str$(hfield.name)
Else
campotemp = Str$(hfield.name)
nombrecampo = Mid$(campotemp, RInStr(campotemp, ".") + 1, Len(campotemp))
Endif
devuelve &= "<th bgcolor=\"" & colorcampos & "\" scope=\"col\">" & nombrecampo & "</th>"
campo.add(Str$(hfield.name))
Next
devuelve &= "</tr>\n"
'escribir los datos
Do While resultados.available
contador += 1
If (Int(contador / 2) * 2) = contador Then
'es par
devuelve &= "<tr bgcolor=\"" & ColorFondoPar & "\">"
Else
devuelve &= "<tr bgcolor=\"" & ColorFondoImpar & "\">"
Endif
For a = 0 To campo.count - 1
devuelve &= "<td>" & resultados[campo[a]] & "</td>"
Next
devuelve &= "</tr>"
resultados.MoveNext
Loop
devuelve &= "</table>"
Return devuelve
End
Enlace de descarga del codigo fuente de ejemplo: https://app.box.com/s/u606auz09wd008vc2ed4
No hay comentarios:
Publicar un comentario