Relatorio com duas datas
24/04/2014
0
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
Posts
24/04/2014
Marcos Saffran
tente o seguinte:
' where (mensagens.data between ' +
QuotedStr(FormatDateTime('yyyy-mm-dd', dtpInicio.Date)) +
' and ' +
QuotedStr(FormatDateTime('yyyy-mm-dd', dtpTermino.Date))
24/04/2014
Marisiana Battistella
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.
24/04/2014
Ricardo
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;
25/04/2014
Deivid Costa
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.
25/04/2014
Ricardo
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.
25/04/2014
Deivid Costa
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.
25/04/2014
Ricardo
Dessa forma aí vc eta fazendo o relatório buscar os dados e ele tem é que receber tais informações.
30/04/2014
Deivid Costa
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?
30/04/2014
Cauê Nishijima
30/04/2014
Deivid Costa
Vou tentar, vlw
14/05/2015
Jose Santos
SELECT * FROM nometabela WHERE campocomadata BETWEEN '$dataInicio' AND '$datafim'
04/11/2015
Valsistemasdelphi
04/11/2015
Valsistemasdelphi
05/11/2015
Raimundo Pereira
rcp@outlook.com.br
05/11/2015
Deivid Costa
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.
Clique aqui para fazer login e interagir na Comunidade :)