Leonardo Xavier
31/08/2010
Que tipo de parâmetros você esta se referindo?
GOSTEI 0
Cleverson.
31/08/2010
Assim, de acordo com um parametro que eu passar o relatório é mostrado .
GOSTEI 0
Wilton Júnior
31/08/2010
Explica melhor como é essa ideia de passagem de parametros que vc deseja fazer?
bacalajr
GOSTEI 0
Cleverson.
31/08/2010
Queria gerar um relatório de acordo com a data que eu passar como parametro.
GOSTEI 0
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.
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
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.
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
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.
31/08/2010
Ele está setado no ClientDataSet, Ele está funcionando, só não funciona quando coloco os parametros.
GOSTEI 0
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.
31/08/2010
Eu fiz outros testes e ele não está aceitando nenhum parametro.
GOSTEI 0
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.
31/08/2010
Ele não está reconhecendo esse comando (prepare).
GOSTEI 0
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
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.
31/08/2010
Lá na Query a propriedade Data Type está ftDate
E value está vazio, é isso mesmo?
GOSTEI 0
Eriley Barbosa
31/08/2010
sim é isso mesmo.
GOSTEI 0
Cleverson.
31/08/2010
Alguém pode me mostrar algum exemplo por favor?
GOSTEI 0
Eriley Barbosa
31/08/2010
O paramType ta como Input?
GOSTEI 0
Eriley Barbosa
31/08/2010
GOSTEI 0
Cleverson.
31/08/2010
Está sim
GOSTEI 0
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.
31/08/2010
Mas quando eu tiro os parametros ele mostra todos os registros.
GOSTEI 0
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.
31/08/2010
Sim, ele retorna os registros.
GOSTEI 0
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
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.
31/08/2010
Já verifiquei, ele está apontando para seus respectivos campos.
GOSTEI 0
Eriley Barbosa
31/08/2010
Cara isto é um mistério, mande para o meu email o seu projeto.
GOSTEI 0
Eriley Barbosa
31/08/2010
GOSTEI 0
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.
31/08/2010
Fiz as modificações, mas continua do mesmo jeito.
Tá muito estranho, pois parece que está normal.
GOSTEI 0
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.
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