QuickReport.

Delphi

31/08/2010

  Bom dia a todos, gostaria de saber como faço para trabalhar com parametros no quickreport?     Att,   Cleverson Melo.
Cleverson.

Cleverson.

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

31/08/2010

Que tipo de parâmetros você esta se referindo?
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Assim, de acordo com um parametro que eu passar o relatório é mostrado .
GOSTEI 0
Wilton Júnior

Wilton Júnior

31/08/2010

Explica melhor como é essa ideia de passagem de parametros que vc deseja fazer?

bacalajr
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Queria gerar um relatório de acordo com a data que eu passar como parametro.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Parametro é na query, não tem nada a ver com o relatório. Monte o seu relatório normalmente e antes de chama-lo passe os parametros para query e abra-a.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Eu fiz na Query mesmo, mas quando vou abrir o relatório, ele abre vazio.     Está dessa forma:     Na Query =     select * from veiculacao   where DATAFIM BETWEEN :DATAINI AND :DATAFIM       No botão onde chama o formulário     CLIENTDATASET.FETCHPARAMS;   CLIENTDATASET.PARAMS.PARAMBYNAME('DATAINI').VALUE:=EDIT1.TEXT;   CLIENTDATASET.PARAMS.PARAMBYNAME('DATAFIM').VALUE:=EDIT2.TEXT;   CLIENTDATASET.OPEN;   FORM_RELATORIO.QUICKREP1.PREVIEW;              
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

CLIENTDATASET.FETCHPARAMS; CLIENTDATASET.PARAMS.PARAMBYNAME('DATAINI').AsDateTime:=StrToDate(EDIT1.TEXT); CLIENTDATASET.PARAMS.PARAMBYNAME('DATAFIM').AsDateTime:=StrToDate(EDIT2.TEXT); CLIENTDATASET.OPEN; //Para ver se retornou registro ShowMessage(IntToStr(ClientDataset.RecordCount)); FORM_RELATORIO.QUICKREP1.PREVIEW;
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Não deu certo, ele está retornando vazio, mas no banco ele retorna alguns registros. Isso tá muito estranho
GOSTEI 0
Jonathan Campos

Jonathan Campos

31/08/2010

o DataSet do QRDBText está setado na query ou no clientdataset?Verifica tbm se datafield está setado no campo certo da sua tabela.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Ele está setado no ClientDataSet, Ele está funcionando, só não funciona quando coloco os parametros.
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

31/08/2010

Faz o seguinte, abra o seu quickreport e verifique se na aba de propriedades dele o campo dataset, esta setado no datasource do seu formulario do relatório. Se ele nao estiver aparecendo você ira abrir as Fields de sua Query e clicar em qualquer uma delas e arrastar o campo selecionado para dentro do seu quick report, irá aparcer uma mensagem clique em ok. Após ter feito isso veja se ao selecionar  o campo DataSet de seu quickreport isa aparecer a sua consulta. Qualquer coisa posta aqui.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Eu fiz outros testes e ele não está aceitando nenhum parametro.
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

31/08/2010

na linha antes de passar os parametros insira...   clientDataset.prepare;   para que ele verifique antes, da passagem de parametros.   tente depois me avise.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Ele não está reconhecendo esse comando (prepare).
GOSTEI 0
Jonathan Campos

Jonathan Campos

31/08/2010

Tente assim
CLIENTDATASET.CLOSE;CLIENTDATASET.FETCHPARAMS;CLIENTDATASET.PARAMS.PARAMBYNAME('DATAINI').AsDateTime:=StrToDate(EDIT1.TEXT);CLIENTDATASET.PARAMS.PARAMBYNAME('DATAFIM').AsDateTime:=StrToDate(EDIT2.TEXT);CLIENTDATASET.OPEN;

 
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Só melhorando um pouco o código:
With CLIENTDATASET do
begin
  CLOSE;  FETCHPARAMS; 
  PARAMS.PARAMBYNAME('DATAINI').AsDateTime:=StrToDate(EDIT1.TEXT);
  PARAMS.PARAMBYNAME('DATAFIM').AsDateTime:=StrToDate(EDIT2.TEXT);
  OPEN;
end;
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Lá na Query a propriedade Data Type está ftDate   E value está vazio, é isso mesmo?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

sim é isso mesmo.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Alguém pode me mostrar algum exemplo por favor?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

O paramType ta como Input?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Tem um artigo aqui no site ensinando a fazer pesquisas com data com clientDataset:   https://www.devmedia.com.br/post-17927-Pesquisa-Data--Delphi.html  
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Está sim
GOSTEI 0
Leonardo Bertolini

Leonardo Bertolini

31/08/2010

Cara,  ou sua query não está retornando nehum registro .....   ou a query não está vinculada ao componente de relatório..
flw
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Mas quando eu tiro os parametros ele mostra todos os registros.
GOSTEI 0
Leonardo Bertolini

Leonardo Bertolini

31/08/2010

Pois eh,..    pega a query com os parametros e roda na mão no BD...  e ve se retorna algum registro...
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Sim, ele retorna os registros.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Eu coloquei assim agora e ele está mostrando a contagem dos registros, porém não está mostrando no relatório, ele está setando para a query certa, verifiquei.         with DmRelatorio.CdsVeiculacao do
          begin
            close;
            FetchParams;
            Params.ParamByName('DATAINI').AsDate:=DataInicial.Date;
            Params.ParamByName('DATAFIM').AsDate:=DataFinal.Date;
            Open;
            ShowMessage(IntToStr(RecordCount));  //aqui ele está mostrando a contagem
          end;
          with FmRelatVeiculacao do
            begin
              QuickRep1.Preview;
              Release;
              FmRelatVeiculacao:=nil;
            end;
          FmRelatorioVeiculacao.Close;
      end; 
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Veja se a propriedade Dataset do relatório aponta para DmRelatorio.CdsVeiculacao. Veja se você tem uma banda detail e dentro desta banda você deve colocar os qrdbText, com a propriedade Dataset apontando para DmRelatorio.CdsVeiculacao e Datafield apontando para seu respectivo campo.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Já verifiquei, ele está apontando para seus respectivos campos.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Cara isto é um mistério, mande para o meu email o seu projeto.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Só consegui abrir o seu projeto, não consegui roda-lo pois minha versão do delphi e do firebird é inferior a sua, mas vamos a algumas modificações:   No FmRelatorioVeiculacao, tem uma unit desnecessaria, que não está sendo usada para nada.   uses UDmRelatorio, UnRelatorioVeiculacao, UFmRelatorioAgendamento;//Retire UFmRelatorioAgendamento   Deixe assim: uses UDmRelatorio, UnRelatorioVeiculacao;   No trecho de código abaixo, pode simplificar: with FmRelatVeiculacao do
            begin
              QuickRep1.Preview;
              Release;
              FmRelatVeiculacao:=nil;
            end;
          FmRelatorioVeiculacao.Close;   Substitua por apenas:   FmRelatVeiculacao.QuickRep1.Preview;   Vamos ao relatório agora:   procedure TFmRelatVeiculacao.FormCreate(Sender: TObject);
begin
  inherited;
  DmRelatorio.CdsVeiculacao.Open;
end;   O evento acima, não deve existir de jeito nenhum e talvez seja isso que está fazendo seu relatório vir vazio, pois, no FmRelatorioVeiculacao, você já ta dando open no cdsVeiculacao, lembra?   with DmRelatorio.CdsVeiculacao do
          begin
            close;
            FetchParams;
            Params.ParamByName('DATAINI').AsDate:=DataInicial.Date;
            Params.ParamByName('DATAFIM').AsDate:=DataFinal.Date;
            Open;
            ShowMessage(IntToStr(RecordCount));
          end;   No evento abaixo: procedure TFmRelatVeiculacao.FormDestroy(Sender: TObject);
begin
  inherited;
  DmRelatorio.CdsAgendamento.Close;
  DmRelatorio.Free;
  DmRelatorio:=nil;
end;   Retire a linha: DmRelatorio.CdsAgendamento.Close;
Pois, você não ta usando CdsAgendamento para nada.   Faça as modificações e teste, para ver como irá funcionar.   Qualquer coisa, cole aqui o código fonte apenas destas duas units.    
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  Fiz as modificações, mas continua do mesmo jeito.   Tá muito estranho, pois parece que está normal.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

31/08/2010

Tente reconstruir o relatório, pois, se você utiliza os outros relatórios da mesma forma e da certo, o problema é com este relatório.
GOSTEI 0
Cleverson.

Cleverson.

31/08/2010

  E aí galera deu certo rsrs   Fiz a construção do relatório novamente.   Muito estranho, mas o importamte é que deu certo agora.     Obrigado a todos pelas ajudas.  
GOSTEI 0
POSTAR