En el artículo anterior sobre cómo trabajar con cuadros y gráficos, nos hemos familiarizado con los gráficos comerciales y los códigos de barras. Ahora es el momento de complicar la tarea y trabajar con diferentes fuentes de datos. La mayoría de los informes se basan normalmente en datos de bases de datos. Para acceder a estos datos, Lazarus proporciona poderosos mecanismos que son utilizados por FastReport.
Componentes de acceso a datos
Esto se refiere a los componentes de la pestaña DataAccess, que pueden actuar como fuentes de datos para el informe. Cualquier componente sucesor de TDataSet se puede utilizar para este propósito.
Además de acceder a los datos definidos en el proyecto, FastReport le permite crear nuevos componentes en tiempo de ejecución. Los principios de nuestra empresa para crear componentes de acceso a datos son muy similares a los que se utilizan en el entorno de Lazarus: imponemos un componente en el formulario y configuramos sus propiedades en el inspector de objetos. La funcionalidad de las conexiones en tiempo de ejecución es un poco más limitada en la elección de formatos de base de datos, por lo que al momento de escribir este artículo, solo DBF y SqLite3 se pueden crear en tiempo de ejecución.
Esto se refiere a los componentes de la pestaña DataAccess que utilizan el componente del conector TfrxDBDataSet de la pestaña FastReportn para conectar una tabla u otra fuente de datos a la banda. Este componente actúa como intermediario entre la fuente de datos y el núcleo de FastReport. El componente es responsable de navegar por los registros y acceder a los campos. Esto le permite evitar vincular el núcleo FastReport a cualquier biblioteca de acceso a datos.
FastReport puede trabajar simultáneamente con BDE y cualquier otra biblioteca, o recuperar datos de una fuente no asociada con la base de datos, como una matriz o un archivo.
El componente TfrxDataSet está diseñado para trabajar con fuentes de datos y debe tenerse en cuenta su versatilidad. Puede utilizar todas las conexiones heredadas de TDataSet. ¡Y esto es BDE, CVS y la gran mayoría de otras bibliotecas! Para trabajar con otras fuentes de datos (matriz, archivo, etc.) se utiliza el componente TfrxUserDataSet.
Para vincular un componente TfrxDBDataSet a una fuente de datos, se debe configurar una de las opciones:
-
La propiedad DataSet, que se vincula directamente a una tabla o consulta.
- La propiedad DataSource, que se conecta al componente TDataSource.
Ambos métodos de conexión son equivalentes, solo el primero lo hace sin el componente TDataSource.
Para que el componente y sus datos asociados estén disponibles en el informe, debe especificar explícitamente qué fuentes de datos se utilizan en el informe. En el diseñador de FastReport, seleccione el elemento de menú "Informe / Datos ..." y en la ventana que aparece, marque las casillas junto a las fuentes requeridas.
Descripción de componentes en el diseñador FastReport
El componente TfrxDBFTable está diseñado para organizar el acceso a una tabla de base de datos .dbf y tiene las siguientes propiedades:
-
FilePath especifica la ruta a la carpeta de la base de datos.
-
TableName asigna el nombre de la base de datos. Al seleccionar una base de datos, también cambiará la ruta.
-
FieldAliases le permite especificar nombres de campo personalizados.
-
Filtro contiene una expresión para filtrar los registros.
-
Filtrado determina si se aplica un filtro.
-
IndexFieldNames almacena los nombres de los campos que forman el índice.
-
IndexName define el nombre del índice secundario.
-
MasterFields incluye los campos asociados con el conjunto de datos maestro.
-
El maestro es el mismo que el conjunto de datos maestro.
-
UserName establece el Alias (nombre de usuario) del conjunto de datos.
Las asignaciones de propiedades del componente son las mismas que las propiedades TDbf en Lazarus. Para conectar el componente a la tabla de la base de datos, simplemente complete la propiedad TableName. Abra la tabla configurando Activo: = Verdadero.
El editor de propiedades FieldAliases le permite seleccionar los campos que estarán disponibles al acceder a la tabla y establecer un nombre personalizado para cada campo y para toda la tabla.
El editor de propiedades MasterFields se utiliza para crear relaciones maestro-detalle entre dos tablas. Para vincular dos tablas con una relación maestro-detalle en una tabla esclava, especifique la tabla maestra en la propiedad Maestra e invoque el editor de propiedades MasterFields. Si la tabla tiene índices secundarios para usar, primero configure la propiedad IndexName.
Este editor le permite vincular visualmente los campos maestro y de detalle de los conjuntos de datos. Cuando los conjuntos están vinculados por una relación maestro-detalle, el contenido del conjunto de detalles se filtra a medida que navega por el conjunto maestro, de modo que solo contiene registros que son relevantes para el registro del conjunto maestro actual.
Para vincular campos de conjuntos, seleccione el campo de la lista de la izquierda (conjunto de detalles), luego el campo de la lista de la derecha (conjunto maestro) y haga clic en el botón "Agregar". Esto moverá el mapeo de campo a la lista inferior. Para borrar la lista inferior, use el botón "Borrar". Es importante tener en cuenta que los campos a vincular deben ser del mismo tipo y clave.
Pero en Lazarus mismo estas propiedades no funcionan con selecciones (clasificación y filtrado de Master-Detail) para componentes TDbf, y como usamos este componente, tampoco nos funciona.
El componente TfrxLazSqliteQuery está diseñado para realizar consultas SQL a la base de datos usando SqLite3 y tiene las siguientes propiedades:
- La base de datos especifica el nombre de la conexión de la base de datos (el valor predeterminado es siempre "sqlLite").
- FieldAliases le permite especificar nombres de campo personalizados.
- Filter almacena una expresión para filtrar los registros.
- Filtrado determina si se aplica un filtro.
- Maestro es lo mismo que el conjunto de datos maestro.
- Params muestra una lista de parámetros de consulta.
- SQL incluye el texto de la consulta.
- UserName establece el alias (nombre de usuario) del conjunto de datos.
-
IgnoreDupParams: si es verdadero, los nombres de los parámetros de consulta no se duplicarán en el editor de parámetros.
La propiedad SQL tiene su propio editor para completar la consulta SQL:
La propiedad Params también tiene su propio editor. Está disponible si el texto de la consulta contiene parámetros.
Un parámetro puede ser de dos tipos: el asignado desde el conjunto de datos maestros y el otro con un valor específico, donde el valor puede ser una constante, una referencia a una variable o una propiedad del objeto.
En caso de que el parámetro se tome del conjunto de datos maestro, se debe configurar la propiedad TfrxLazSqliteQuery.Master. El conjunto de datos debe contener un campo con el mismo nombre que el parámetro. No es necesario especificar el tipo y el valor del parámetro.
El componente TfrxLazSqliteDataBase se utiliza para conectarse a la base de datos SqLite3. Su propósito es similar a los componentes TSQLite3Connection y TSqlTransaction, y tiene las siguientes propiedades:
- Conectado: cuando True está activo, la conexión está activada.
- DatabaseName le permite seleccionar un nombre para la base de datos.
- LoginPrompt define si al usuario se le debe solicitar una contraseña cuando se conecta a la base de datos. Si LoginPrompt = False, el nombre de usuario y la contraseña deben especificarse en la cadena de conexión.
Creación de informes con acceso a la base de datos
Considere la posibilidad de crear un informe simple que contenga componentes de acceso a datos, donde usaremos la base de datos de demostración LDemo como ejemplo.
Para empezar, creemos un proyecto, con el que realizaremos nuestros experimentos. Haga un nuevo proyecto en Lazarus y coloque en el formulario los componentes TfrxReport, TfrxDesigner, TfrxDialogControls, TfrxDBDataset, TDbf.
Configure la conexión a la base de datos. Para hacer eso, busque la propiedad TableName de Dbf1 y en el cuadro de diálogo, elija el archivo de base de datos; cualquier cosa con una extensión .dbf funcionará. A continuación, establezca la propiedad DataSet de frxDBDataset1 en "Dbf1".
Luego agregue el botón al formulario e ingrese el siguiente código en OnClick:
1 2 3 4 |
procedure TForm1.Button1Click(Sender: TObject); begin frxReport1.DesignReport; end; |
Recuerde permitir subprocesos para el proyecto de Linux. Esto se describió en el artículo de instalación. Después de eso, compile y ejecute el proyecto. No se requiere nada más para crear el diseñador de informes del usuario final.
Al hacer clic en Diseño, el diseñador se abre con un informe vacío. Considere la posibilidad de crear informes sencillos en este entorno. Por cierto, en este punto ya sabe cómo conectar bases de datos a FR desde Lazarus.
Un informe simple de tipo "Lista"
Ahora generaremos datos de una tabla de base de datos que ya usa FR en tiempo de ejecución. Siga los siguientes pasos para generar el informe:
- Haga clic en el botón "Nuevo informe" en la barra de herramientas del Diseñador. FastReport creará un informe vacío que contiene las páginas "Código", "Datos", "Página1".
- Cambie a la página "Datos" y coloque el componente "Tabla DBF" en la página:
-
Seleccione la base de datos a conectarse. Para hacer esto, establezca la propiedad TableName en el Inspector de objetos seleccionando el archivo customer.dbf del proyecto de demostración.
-
Para conectar el banco de datos de Nivel 1 a la tabla, haga doble clic en él y seleccione nuestra tabla en la ventana que se abrirá. Luego, arrastre y suelte los campos deseados de la ventana Árbol de datos en la hoja del informe. Nuestro informe se verá así:
Para ver el informe resultante, haga clic en el botón "Vista previa" en la barra de herramientas.
Opciones de manejo de datos útiles
La pestaña Datos no es solo para componentes de acceso a datos. Con los objetos Texto y Dibujo, puede colocar etiquetas explicativas y dibujar diagramas simples, como se muestra en la siguiente figura: