Relatorio com duas datas

24/04/2014

0

Boa Tarde!

Estou criando um relatório de funcionários porem preciso adicionar um filtro entre as datas de cadastro, então criei uma tela onde a pessoa informa em dois datepicker a data inicial e final. Porem preciso de ajuda para criar o select, como eu posso o colocar o valores do datepicker dentro do where do select?
Estou usando bd SQL Server.
Deivid Costa

Deivid Costa

Responder

Posts

24/04/2014

Marcos Saffran

Boa tarde,

tente o seguinte:

' where (mensagens.data between ' +
QuotedStr(FormatDateTime('yyyy-mm-dd', dtpInicio.Date)) +
' and ' +
QuotedStr(FormatDateTime('yyyy-mm-dd', dtpTermino.Date))
Responder

24/04/2014

Marisiana Battistella

Boa tarde!
Para incluir no select você pode passar as datas através de variáveis (uma para cada data) na query que executa o select que busca os dados para o relatório.
Eu já fiz isso utilizando o Oracle.
Responder

24/04/2014

Ricardo

Passa as datas por parâmetro.

Fiquei com preguiça de digitar, então resolvi copiar e colar parte do código de um software meu. Basta você substituir os campos e nomes de componentes pelos seus.


var
Data1,Data2 : string;

begin
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido. A data inicial não pode ser posterior a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
else
begin
Data1 := DateToStr(DateTimePicker1.Date);
Data2 := DateToStr(DateTimePicker2.Date);

With <Sua Query ou outro componente> do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM <sua tabela> WHERE campo da tabela >= :pData1 AND campo da tabela <= :pData2 ';
Parameters.ParamByName('pData1').Value := StrToDate(Data1);
Parameters.ParamByName('pData2').Value := StrToDate(Data2);
Prepared;
Open;
end;
end;

end;
Responder

25/04/2014

Deivid Costa

Pessoal eu fiz dessa maneira:
var
 dt_inicial,dt_final : String;
begin
  dt_inicial:= DateToStr(frm_filtro.dateTimePicker1.Date);
  dt_final:= DateToStr(frm_filtro.dateTimePicker2.Date);
  frm_relatorio.ADOQuery1.Close;
  frm_relatorio.ADOQuery1.SQL.Clear;
  frm_relatorio.ADOQuery1.SQL.Add('SET DATEFORMAT dmy');
  frm_relatorio.ADOQuery1.SQL.Add('SELECT * FROM pessoa WHERE  DATA_CADASTRO >= :dt_ini AND DATA_CADASTRO <= :dt_fin');
  frm_relatorio.ADOQuery1.Parameters.ParamByName('dt_ini').Value := dt_inicial;
  frm_relatorio.ADOQuery1.Parameters.ParamByName('dt_fin').Value := dt_final;
  frm_relatorio.ADOQuery1.ExecSQL;
end;


Não ocorreu nenhum erro porem o relatório não traz nada.
Esse codigo esta no evento preview do relatorio.
Responder

25/04/2014

Ricardo

Que ferramenta você esta usando para criar o relatório?

O código que te passei funciona perfeitamente e estive olhando este seu e também está ok. Porém seria mais viável você carregar o resultado dessa consulta em uma tabela temporária por exemplo, em um dbgrid, em um listview etc.. e a partir desses você envia para o relatório.
Responder

25/04/2014

Deivid Costa

Que ferramenta você esta usando para criar o relatório?

O código que te passei funciona perfeitamente e estive olhando este seu e também está ok. Porém seria mais viável você carregar o resultado dessa consulta em uma tabela temporária por exemplo, em um dbgrid, em um listview etc.. e a partir desses você envia para o relatório.


Estou usando QuickReport Delphi XE4.
Responder

25/04/2014

Ricardo

Tenta fazer como eu falei; carregar o resultado da consulta em algum lugar e depois enviá-los para o relatório. Deste jeito aí que vc está fazendo eu nunca fiz. Na lógica parece dar certo, mas na execução pode não dar.

Dessa forma aí vc eta fazendo o relatório buscar os dados e ele tem é que receber tais informações.
Responder

30/04/2014

Deivid Costa

Pessoa consegui fazer dessa maneira:
begin
 with frm_relatorio.ADOQuery1 do 
 begin 
 Close; 
 SQL.Clear; 
 SQL.Add('SELECT * from pessoa WHERE DATA_CADASTRO between :DataIni and :DataFim ORDER BY DATA_CADASTRO'); 
 Parameters.ParamByName('DataIni').Value := DateTimePicker1.DateTime; 
 Parameters.ParamByName('DataFim').Value :=DateTimePicker2.DateTime; 
 Open; 
 if IsEmpty then 
 begin 
 ShowMessage('Nenhuma informação localizada.'); 
 Exit; 
 end; 
 end; 
 frm_relatorio.QuickRep1.Preview; 
end;


Porem ocorre um problema se eu colocar a mesma data nos 2 DateTimePicker o sistema não retorna nada.
Alguém pode me ajudar?
Responder

30/04/2014

Cauê Nishijima

Zera a propriedade TIME dos dois DateTimePicker e tenta....
Responder

30/04/2014

Deivid Costa

Zera a propriedade TIME dos dois DateTimePicker e tenta....


Vou tentar, vlw
Responder

14/05/2015

Jose Santos

Você seguindo esse codigo exemplo e colocando certinho com o seu banco vai conceguir

SELECT  * FROM nometabela WHERE campocomadata BETWEEN '$dataInicio' AND '$datafim'
Responder

04/11/2015

Valsistemasdelphi

Iae pessoal.. Estou com o mesmo problema a meses que tento achar uma forma de visualizar uma datainicial e uma data final em dois TDateTimePicker...eu Uso Ibtable
Responder

04/11/2015

Valsistemasdelphi

Iae pessoal.. Estou com o mesmo problema a meses que tento achar uma forma de visualizar um relatório de vendas aqui no sistema que estou desenvolvendo e nada consegui até agora. uma datainicial e uma data final em dois TDateTimePicker...eu Uso Ibtable
Responder

05/11/2015

Raimundo Pereira

Brother se puder envie-me cópia do projeto e bd, realizo a rotina e lhe envio de volta.
rcp@outlook.com.br
Responder

05/11/2015

Deivid Costa

Opa, galera consegui resolver o problema da seguinte maneira:
With QryDados do
begin
  Close;
  SQL.Clear;
  SQL.Add(SELECT TABELA WHERE DATA Between :pDataIni and :pDataFim);
  ParamByName('pDataIni').AsDateTime := DateTimePickerIni.DateTime;
  ParamByName('pDataFim').AsDateTime := DateTimePickerFim.DateTime;
  Open;
end


Obrigado pela ajuda de todos.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar