Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Usando una conexión a base de datos distinta en un subreporte de JasperReports

Al incluir un subreporte en JasperReports por default éste utiliza la misma conexión a base de datos que el reporte maestro que contiene el subreporte.


Sin embargo, a veces es deseable que el subreporte se conecte a una base de datos diferente.


Una manera de lograrlo es la siguiente:

  1. Incluir el subreporte como cualquier otro
  2. Agregar un parametro, que en este ejemplo llamaré SUBREPORT_CONNECTION, con Parameter Class = java.sql.Connection , no usar prompt,Default value expression = java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/base_de_datos", "usuario", "password")[Obviamente, editar la url para que coincida con el motor de BD usado, nombre de base, puerto, host y demas datos]
  3. En las propiedades del subreporte,Connection type = Use a connection expression,
    Connection expression = $P{SUBREPORT_CONNECTION}(o como sea que se le haya nombrado al parámetro del inciso anterior)
  4. Si al intentar generar el reporte, aparece un error del tipo "No suitable driver found for jdbc:mysql://localhost:3306/base_de_datos", puede funcionar agregar un parametro mas, que se cargue antes del de SUBREPORT_CONNECTION (en iReport se pueden acomodar el orden de los parámetros y ese es el orden de carga también), que no use prompt, que
    Parameter Class = java.lang.Classy con
    Default value expression = Class.forName("com.mysql.jdbc.Driver").getName()[O como sea que se llame la clase Driver del manejador de BD utilizado...]
  5. Por último, si aún con esto surge una excepción ClassNotFoundException para, en este ejemplo, com.mysql.jdbc.Driver, se puede copiar el jar al subdirectorio jre/lib/ext de donde se encuentre instalada la máquina virtual que use JasperReports para compilar los reportes.

Usando una base de datos SQLite en un proyecto de Symfony2

Para configurar una base de datos en un proyecto de Symfony2, se edita el archivo app/config/parameters.ini:


[parameters]
    database_driver   = pdo_sqlite
    database_host     = localhost
    database_port     =
    database_name     = test_project.db
    database_user     = root
    database_password = 


Sin embargo, con esta configuración, que es la default para usar cualquier otro motor de base de datos con Doctrine2 (incluido en cualquier instalación estándar de Symfony2), una base de datos SQLite no funciona.


Lo correcto es, primero, editar y agregar una línea en app/config/config.yml:



doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        path:     %database_path%
        charset:  UTF8

Esta línea no se encuentra originalmente en el archivo, se agrega para que Doctrine utilice el parámetro 'database_path', que ahora se agrega a parameters.ini:

[parameters]
    database_driver   = pdo_sqlite
    database_host     = localhost
    database_port     =
    database_name     = test_project.db
    database_user     = 
    database_password = 
    database_path     = /path_to_my_project/app/db/test_project.db

Y con eso, la base de datos queda creada en el path establecido. Notar que para servidores Unix (Linux por ejemplo), este archivo debe quedar con permisos de lectura/escritura por parte del usuario que utilice el servidor web (cualquiera que este sea, http, www-data o lo que sea): Y el directorio donde reside el archivo tambien debe tener permisos de lectura, escritura y ejecución para este mismo usuario (en este caso, el subdirectorio db que yo puse aquí dentro de app/, pero en realidad podría residir donde más nos convenga).