Search Results for

    Show / Hide Table of Contents

    Relatório com grupos

    No exemplo anterior criamos um relatório de dois níveis baseado nos dados de duas tabelas. É possível construir outro relatório com o mesmo aspecto no FastReport, que desta vez é baseado em um conjunto de dados obtido de uma consulta conjunta.

    Para fazer isso é necessário uma consulta SQL que retorna dados de ambas as tabelas ordenado de maneira específica. Em nosso exemplo, as tabelas serão unidas nos campos "CustNo", que estão presentes em ambas as tabelas. A consulta pode ser:

    select * from customer, orders
    where orders.CustNo = customer.CustNo
    order by customer.CustNo
    

    A linha "order by" é necessária para ordenar os registros no campo "CustNo". Esta consulta retorna um conjunto de dados parecido com isto:

    CustNo   Company             OrderNo   SaleDate
    1221     Kauai Dive Shoppe   1023      01.07.1988
    1221     Kauai Dive Shoppe   1123      24.08.1993
    1231     Unisco              1060      28.02.1989
    1351     Sight Diver         1003      12.04.1988
    1351     Sight Diver         1052      06.01.1989
    1351     Sight Diver         1055      04.02.1989
    

    Como é possível fazer o design de um relatório de vários níveis usando estes dados? No FastReport há uma banda especial, o "Cabeçalho de Grupo". Uma condição (um campo de BD ou uma expressão) é especificada para a banda; a banda é exibida sempre que o valor da condição for alterado. O exemplo a seguir ilustra isso.

    Crie um relatório novo no designer do FastReport. Coloque um componente "Consulta ADO" na página e configure suas propriedades:

    SQL = 
      select * from customer, orders
      where orders.CustNo = customer.CustNo
      order by customer.CustNo
    
    UserName = 'Group'
    

    Depois adicione uma banda "Cabeçalho de Grupo" ao relatório. Defina uma condição (neste caso o campo de dados "Group.CustNo") no editor da banda "Cabeçalho de Grupo":

    Também vincule a banda de dados à fonte de dados "Group" e arranje alguns objetos como mostrado abaixo (observe que o cabeçalho do grupo deve ser colocado acima da banda de dados):

    Ao visualizar o relatório, obtemos uma saída similar a isto:

    Como você pode ver, a banda "Cabeçalho de Grupo" é exibida somente quando o valor do campo ao qual é vinculada é alterado. Caso contrário, a banda de dados conectada ao conjunto de dados "Group" é exibida. Se compararmos este relatório ao relatório mestre-detalhe criado anteriormente, é óbvio que os números de pedidos não são ordenados. Isso pode ser corrigido com facilidade ao alterar a cláusula 'order by' da consulta SQL:

    select * from customer, orders
    where orders.CustNo = customer.CustNo
    order by customer.CustNo, orders.OrderNo
    

    É possível fazer o design de relatórios que possuam grupos aninhados de maneira similar. A profundidade de grupos aninhados é ilimitada. Relatórios que usam grupos têm algumas vantagens sobre relatórios do tipo mestre-detalhe:

    • todo o relatório precisa de somente um conjunto de dados (consulta)

    • o número de níveis de agrupamento de dados é ilimitado

    • é possível ordenar os dados

    • uso mais otimizado dos recursos de BD (a consulta retorna apenas um conjunto de dados para saída e a filtragem é executada pela consulta).

    A única desvantagem é a necessidade de escrever consultas na linguagem SQL. No entanto, o conhecimento básico de SQL é praticamente obrigatório para qualquer programador que trabalhe com bancos de dados.

    Back to top © 1998-2022 Copyright Fast Reports Inc.