Imprimir resultado de DBGrid no QuickReport

Delphi

18/11/2013

Ola, pessoal....estou num impasse para concluir meu projeto.

Tenho um form onde tenho os seguinte componentes:
1 Edit;
1 Botão Pesquisar;
1 Botão Imprimir;
1 Botão Fechar;
1 DBGrid;
1 TQuery;

Ao preencher o Edit com o item da busca e clicando no Botão Pesquisar que aciona TQuery, o resultado da pesquisa é mostrado na DBGrid. Agora como fazer para, a linha da DBGgrid que eu selecionar vá para o Quick Report para imprimir?

Explicando melhor. O form vai buscar todos os clientes cadastrados no sistema e listar na DBGrid. E no Quick Report deverá imprimir o histórico de receituário do cliente selecionado.

O formulário de impressão já tem uma query para pesquisar e mostrar na impressão os dados. Só não estou conseguindo passar os dados do form para o relatório.

Agradeço de já a ajuda
Carlos Magno

Carlos Magno

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

18/11/2013

Em um relatório você precisa ligar os controles a um DataSet (Table, Query, etc). Sendo assim, monte o SQL do DataSet dinamicamente no form com o Quick Report, fazendo o mesmo filtro que você tem no form com os controles.
GOSTEI 0
Deivison Melo

Deivison Melo

18/11/2013

veja se isso ajudará vc

[url]https://www.devmedia.com.br/forum/imprimir-so-1-registro-selecion-no-dbgrid-no-quick-report/252081[/url]

abração e bons códigos!!!
GOSTEI 0
Carlos Magno

Carlos Magno

18/11/2013

Deivison....o tópico me ajudou bastante mas ainda não chegou no ponto que eu queria. Só ta faltando listar no relatório todas os registros que o cliente possui.
GOSTEI 0
Deivison Melo

Deivison Melo

18/11/2013

acho que isso o ajudará:

procedure TfrmRelatorioEmpresas.btnImprimirClick(Sender: TObject);
var
  strSQL: String; //Variável SQL
begin
  strSQL:=''; //Limpando variável
  strSQL:=
          'select '+
          '   codigo_empresa, '+
          '   razao_social_empresa, '+
          '   logradouro_empresa, '+
          '   cidade_empresa, '+
          '   fone_empresa||'' / ''||fax_empresa Fone, '+
          '   documento_empresa '+
          '  from empresas '+
          ' where 1 = 1 ';

  if not chkTodos.Checked then
  begin
    if chkCodigo.Checked then
    begin
      if trim(edtCodigo.Text) = '' then
      begin
        ShowMessage('Digite um termo a ser pesquisado');
        edtCodigo.SetFocus;
        exit;
      end
      else
        strSQL:=strSQL + 'and codigo_empresa = '+edtCodigo.Text;
    end;
    end
  else
  begin
      strSQL:=strSQL + 'order by codigo_empresa';
  end;

  cdsConsulta.Close;
  cdsConsulta.CommandText:=strSQL;
  cdsConsulta.Open;

  if not cdsConsulta.IsEmpty then
  begin
    RelEmpresas.PreviewModal;
  end
  else
  begin
    MessageDlg('Não há resultados para os termos pesquisados!!!!!!', mtInformation, [mbOK], 0);
    edtCodigo.SetFocus;
    Exit;
  end;
end;


Abração e bons códigos!

Qualquer dúvida por favor falar!!!
GOSTEI 0
Carlos Magno

Carlos Magno

18/11/2013

Deivison.....estudei o código acima e tentei modificar para minha utilização mas deu um erro nesta linha:

if not chkTodos.Checked then //Erro: E2003 Undeclared identifier: 'chkTodos'


No meu projeto não possui nenhum check e nem sei onde colocar.

No relatório de impressão ele já mostra o Nome do Cliente e apenas um dos registros dele e eu quero que liste todos os registro do Cliente.
GOSTEI 0
Deivison Melo

Deivison Melo

18/11/2013

Isso eh um checkbox, vc colocou ele na sua tela ?

Na verdade ou eu dou a opção de emitir tudo ou de seleciona um código em um edit ou no próprio (isso nesse exemplo que coloquei ai para que entendesse).

Manda seu código todo e se possível o print da tela.

Abração e bons códigos!!
GOSTEI 0
Carlos Magno

Carlos Magno

18/11/2013

Segue abaixo os códigos:

Do formulário de pesquisa:
unit U_HistoricoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DB, DBTables, Grids, DBGrids, DBCtrls;

type
  TfrmHistoricoCliente = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    QRYCliente: TQuery;
    Button2: TButton;
    DBGrid1: TDBGrid;
    dsClienteList: TDataSource;
    QRYClienteOS_NOME: TStringField;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmHistoricoCliente: TfrmHistoricoCliente;

implementation

uses U_HistoricoClientePrint, U_DM;

{$R *.dfm}

procedure TfrmHistoricoCliente.Button1Click(Sender: TObject);
begin
   QRYCliente.Close;
   QRYCliente.Filter:= 'OS_NOME ='+''''+Edit1.Text+'*''';
   QRYCliente.Open;
   QRYCliente.Filtered:=true;
end;

procedure TfrmHistoricoCliente.Button2Click(Sender: TObject);
begin
   QRYCliente.Close;
   close;
end;

procedure TfrmHistoricoCliente.Button3Click(Sender: TObject);
begin
  frmHistoricoClientePrint.QRLabel1.Caption:='Histórico de '+QRYClienteOS_NOME.Value;
  frmHistoricoClientePrint.query1.Close;
  frmHistoricoClientePrint.query1.ParamByName('CLIRX').Value:=QRYClienteOS_NOME.Value;
  frmHistoricoClientePrint.query1.Open;
  frmHistoricoClientePrint.qrHCP.Preview;
end;

end.


Query do formulário de pesquisa:
SELECT DISTINCT(OS_NOME) FROM OS.DB


Query do relatório de impressão:
SELECT * FROM OS.DB WHERE OS_NOME=:CLIRX ORDER BY OS_DATAIN


Imagem do formulário de pesquisa:
[url]http://www.casimages.com.br/i/131119052334479528.png.html[/url]

Imagem do relatório de impressão:
[url]http://www.casimages.com.br/i/131119053342341950.png.html[/url]
GOSTEI 0
Deivison Melo

Deivison Melo

18/11/2013

Observando o código do seu formulário a imagem enviada:

Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    QRYCliente: TQuery;
    Button2: TButton;
    DBGrid1: TDBGrid;
    dsClienteList: TDataSource;
    QRYClienteOS_NOME: TStringField;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);


Não encontrei o checkbox !

Abração e bons códigos!!!

Emanoel Deivison
GOSTEI 0
Járabe Emanuel

Járabe Emanuel

18/11/2013

Boa tarde!
Amigo axo que vc precisa apenas parar e analisar a tua logica.
Eu faria assim

//Na propriedade OnChange
Query1 (filtra a tabela Cliente baseado no que foi informado no Edit1 e mostra o resultado do filtro no DBGrid1)

//Colocado na propriedade OnCellClick do DBGrid1
Query2 (1º - Captura o Código do cliente ao clicar na linha do DBGrid1 correspondente ao cliente desejado. 2 º Filtra a tabela Histórico de cliente, baseado no código do cliente capturado)

* Vincule a Query 2 ao QuickRep1 na propriedade DataSet
* Vincule os campos QRDBText1 (Campos a serem impressos) a Query2 na propriedade DataSet e na propriedade DataField escolha os campos da query2 a serem impressos

Espero que ajude.
GOSTEI 0
Carlos Magno

Carlos Magno

18/11/2013

Deivison....nunca teve um checkbox no projeto. Todos os componentes foram listados no inicio do tópico.

Járabe....vou dar uma analisada melhor levando em conta suas dicas e posto se consegui ou não.
GOSTEI 0
Carlos Magno

Carlos Magno

18/11/2013

Pessoal.....resolvi....

Járabe......valeu pela luz.....havia me esquecido de ligar o QReport a query....kkkkkkkk

Foi esquecimento meu.....mas mesmo assim agradeço aos que se prontificaram a ajudar

Obrigado mais uma vez e abraço a todos.
GOSTEI 0
Deivison Melo

Deivison Melo

18/11/2013

Finalizando o tópico!

Qualquer anormalidade estou à disposição!

Abração e bons códigos!!
GOSTEI 0
POSTAR