Imprimir resultado de DBGrid no QuickReport
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
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
Curtidas 0
Respostas
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
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!!!
[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
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
18/11/2013
acho que isso o ajudará:
Abração e bons códigos!
Qualquer dúvida por favor falar!!!
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
18/11/2013
Deivison.....estudei o código acima e tentei modificar para minha utilização mas deu um erro nesta linha:
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.
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
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!!
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
18/11/2013
Segue abaixo os códigos:
Do formulário de pesquisa:
Query do formulário de pesquisa:
Query do relatório de impressão:
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]
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
18/11/2013
Observando o código do seu formulário a imagem enviada:
Não encontrei o checkbox !
Abração e bons códigos!!!
Emanoel Deivison
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
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.
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
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.
Járabe....vou dar uma analisada melhor levando em conta suas dicas e posto se consegui ou não.
GOSTEI 0
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.
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
18/11/2013
Finalizando o tópico!
Qualquer anormalidade estou à disposição!
Abração e bons códigos!!
Qualquer anormalidade estou à disposição!
Abração e bons códigos!!
GOSTEI 0