Consultas, desarrollo de programas y petición de presupuestos:

sábado, 19 de mayo de 2012

InformeHtml: Crear informes rápidos de consultas de bases de datos en Gambas


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...
Private conexion As Connection
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"



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 informeHtml

 '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


Enlace de descarga del codigo fuente de ejemplo: https://app.box.com/s/u606auz09wd008vc2ed4



Enlace interesante: colores para html
http://es.wikipedia.org/wiki/Colores_HTML

No hay comentarios:

Publicar un comentario