Autor
Mensagem
Informações sobre o chamado:
Criado em: 31/8/2010 9:44:22 AM
Status deste chamado: em andamento
Última ação ref. este chamado: Chamado resp. pelo usuario
Ver histórico do chamado
Criado em: 31/8/2010 9:44:22 AM
Status deste chamado: em andamento
Última ação ref. este chamado: Chamado resp. pelo usuario
Ver histórico do chamado
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.
Tente assim
#Código
</span></div><div><span class="Apple-style-span" style="font-family: verdana; font-size: small; line-height: 17px; ">CLIENTDATASET.CLOSE;</span></div>CLIENTDATASET.FETCHPARAMS;<div>CLIENTDATASET.PARAMS.PARAMBYNAME('DATAINI').AsDateTime:=StrToDate(EDIT1.TEXT);</div><div>CLIENTDATASET.PARAMS.PARAMBYNAME('DATAFIM').AsDateTime:=StrToDate(EDIT2.TEXT);</div><div>CLIENTDATASET.OPEN;</div><div>
Só melhorando um pouco o código:
#Código
</FONT></SPAN></DIV>
<DIV><SPAN style="LINE-HEIGHT: 17px; FONT-FAMILY: verdana; FONT-SIZE: small" class=Apple-style-span><FONT size=2>With <SPAN style="LINE-HEIGHT: 17px; FONT-FAMILY: verdana; FONT-SIZE: small" class=Apple-style-span><FONT size=2>CLIENTDATASET</FONT></SPAN> do</FONT></SPAN></DIV>
<DIV><SPAN style="LINE-HEIGHT: 17px; FONT-FAMILY: verdana; FONT-SIZE: small" class=Apple-style-span><FONT size=2>begin<O:P></O:P></FONT></SPAN></DIV>
<DIV><SPAN style="LINE-HEIGHT: 17px; FONT-FAMILY: verdana; FONT-SIZE: small" class=Apple-style-span><FONT size=2> CLOSE;</FONT></SPAN></DIV><FONT size=2> FETCHPARAMS; </FONT>
<DIV><FONT size=2> PARAMS.PARAMBYNAME('DATAINI').AsDateTime:=StrToDate(EDIT1.TEXT);</FONT></DIV>
<DIV><FONT size=2> PARAMS.PARAMBYNAME('DATAFIM').AsDateTime:=StrToDate(EDIT2.TEXT);</FONT></DIV>
<DIV><FONT size=2> OPEN;</FONT></DIV>
<DIV><FONT size=2>end;</FONT></DIV>
<DIV><FONT size=2>
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.








