Ir para conteúdo
Fórum Script Brasil
  • 0

Quickreport


ArchimedS-S

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0
bom pessoal, eu to começando nessa parte de relatórios...bom, não sei o que falta eu fazer ou to errando em algum lugar, mas quando do um PREVIEW no QR, ele mostra apenas a primeira linha da tabela em questão....invés de todas....se puderem me ajudar...desde já grato!
Qual o tipo de banda que você está utilizando?

Quando você coloca um TQRBand deve definir seu tipo (propriedade BandType) para rbDetail e é nesta banda que você vai colocar os componentes TQRDB... para mostrar os dados proveniente do dataset.

Link para o comentário
Compartilhar em outros sites

  • 0
legal...outra dúvida, DataSet tanto do QR como do QRDBText...posso usa uma tabela no dataset e uma query certo ?
perfeitamente.

em que casos usaria query ?
acredito que na maioria dos casos. De um modo geral você emite relatórios baseados em algum tipo de critério e, neste caso, é onde mais se aplica o uso de query já que você facilmente introduzirá filtros na sua consulta - dados num período, itens de um determinado cliente, ...

Lembre-se sempre, que no QuickReport, você deverá ter no mínimo uma banda: rbDetal; Esta banda será processada para cada linha proveniente do dataset ligado ao Quickrep.

O dataset utilizados em um QRDBText não precisam ser necessariamente o mesmo do QuickRep. O dataset "diz" apenas de onde será obtido o dado a ser impresso. Vejamos um exemplo (bem bobo), para mostrar o que quero dizer:

digamos que temos as seguintes tabelas:

+------------+ +------------+ +------------+
|  CLIENTES  | |   CIDADE   | |    CEP     |
+------------+ +------------+ +------------+
|COD_CLIENTE | | COD_CIDADE | | COD_CEP    |
|NOM_CLIENTE | | NOM_CIDADE | | NOM_RUA    |
|COD_CEP     | | DSC_UF     | +------------+
|NUM_ENDERECO| +------------+
|COD_CIDADE  |
+------------+
Então ao criar um relatório que mostre os dados do clente, você poderia fazer a mesma coisa de, pelo menos, duas formas diferentes: 1) Utilizando um único dataset do tipo TQuery, você faria uma consulta em que retornaria todos os dados do cliente em uma única linha. O SQL ficaria assim:
SELECT C.COD_CLIENTE, C.NOM_CLIENTE, P.NOM_RUA, C.NUM_ENDERECO, D.NOM_CIDADE, D.DSC_UF
FROM CLIENTES C, CIDADE D, CEP P
WHERE C.COD_CEP = P.COD_CEP
  AND C.COD_CIDADE = D.COD_CIDADE
ORDER BY C.NOM_CLIENTE
Com esta situação, este dataset seria utilizado tanto no Quickrep quanto nos componentes QRDBEdit's. Mas poderia ser feito também de outra forma: 2) Utilizando um dataset do tipo TTable, ligado ao QuickRep, você acessaria os dados da tabela cliente e colocaria este mesmo dataset apenas nos campos que não vem das tabelas relacionadas (Cidade e CEP); você, então, utilizaria componentes do tipo TQuery para buscar os demais campos, donde resuta que você teria dois componentes do tipo TQuery (um para Cidade e outro para CEP) com os seguintes SQL, respectivamente:
*/ SQL para obter o nome da rua /*
SELECT NOM_RUA
FROM CEP
WHERE COD_CEP = :COD_CEP

*/ SQL para obter o nome da cidade e uf /*
SELECT NOM_CIDADE, DSC_UF
FROM CIDADE
WHERE COD_CIDADE = :COD_CIDADE
Observe que cada SQL foi definido para receber um parâmetro (:nome_parametro). Não por acaso, utilizamos o mesmo nome dos campos que existem na tabela principal (nosso dataset TTable ligado ao QuickRep). Adicionando um DataSource em que atribuímos a sua propriedade DataSet o dataset principal (Cliente); Selecionamos na propriedade MasterSource dos componentes TQuery (Cidade e CEP) este DataSource. Disto resulta que, ao ser movimentado o ponteiro de registros (linha) na tabela principal (Cliente), as querys serão reexecutadas, obtendo os respectivos parâmetros (via datasource) da tabela principal. Para tanto, antes do preview, devem ser abertas as query's e após a tabela. Algo tipo:
procedure TFormBtnImprimeClick(Sender :TObject);
begin
  QryCEP.Open;
  QryCidade.Open;
  TabCliente.Open;
  try
    QuickRep.Preview
  finally
    TabCliente.Close;
    QryCEP.Close;
    QryCidade.Close;
  end;
end;

Há, ainda, outras formas de fazer este mesmo relatório. você pode questionar: mas porque usar o 2º exemplo, que utiliza muito mais componentes, ao invés de utilizar o 1º ? Eu diria: É bom que você saiba que existe esta possibilidade porque, possivelmente, haverá algum momento na sua vida de programador que esta será a melhor alternativa (senão a única) para construir determinado relatório (não tão simples quanto o do exemplo). Inclusive, uma situação comum, é quando você tem relatórios com sub-detalhes, onde na banda tipo QRSubDetail você tem a propriedade DataSet com outra origem de dados que não a do QuickRep, mas vinculada a ele (p.e. na banda detalhe fica o header de um pedido - Pedidos - e na sub-detalhe os itens - ItemPedidos)

Abraços

p.s. não tem jeito - escrevi um livro denovo :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...