Autor
Mensagem
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;
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;
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.
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;
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;
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;
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;
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;
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;
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.
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.






