relatórios por período de data

Delphi

03/02/2011

Pessoal, fiz um relatório por período de datas que aparentenmente estava fucionando, mas depois analisando percebi um erro e confesso q já estou há algumas horas tentando corrigir, funcionan assim:

1º) dbloocapcombobox eu escolho uma unidade
2º) Depois escolho um período de data

Caso eu queira só uma data por exemplo, 31/01/2011 à 31/01/2011, só aparecem 5 registros (que são os primeiros) num total de 9.
Mas se eu escolher de 30/01/2011 à 01/02/2011, os 9 registro do dia 31 aparecerem, os registros do dia 30 também aparecem, mas os registros do dia 01/02 acontece a mesma coisa, não aparecem todos os registros.

procedure Tfrm_EscolhaUnidade.BitBtn1Click(Sender: TObject);
var
  Sql, Email, Uf : String;

begin // 1

   sql:=ADOQuery_relatoriounidade.AsString;  // pego o valor do DBLoockupCombobox

   dm.QRY_Email.Close;
   dm.QRY_Email.SQL.Clear;
   dm.QRY_Email.SQL.Add('SELECT * FROM Email WHERE unidade = '+QuotedStr(sql)+'ORDER BY unidade');
   dm.QRY_Email.Open;

   Email:=dm.QRY_Emailemail.AsString;
   unidade:=DM.QRY_Emailunidade.AsString;
   Uf:=DM.QRY_Emailuf.AsString;

   if Uf='' then
     Begin
      dm.QRY_relatorio.Close;
      dm.QRY_relatorio.SQL.Clear;
      dm.QRY_relatorio.SQL.Add('SELECT * FROM telemedicina WHERE para = :Email' );
      dm.QRY_relatorio.SQL.Add(' and data BETWEEN :_dta_ini and :_dta_fim');
      dm.QRY_relatorio.SQL.Add(' ORDER BY data');

      dm.QRY_relatorio.Parameters.ParamByName('Email').Value := Email;
     end
   else
     Begin
       Uf := 'S';
       dm.QRY_relatorio.Close;
       dm.QRY_relatorio.SQL.Clear;


       dm.QRY_relatorio.SQL.Add('SELECT * FROM telemedicina WHERE data >= :_dta_ini and data <= :_dta_fim');
       dm.QRY_relatorio.SQL.Add('and UF = :_UF');
       dm.QRY_relatorio.SQL.Add(' ORDER BY data');

       dm.QRY_relatorio.Parameters.ParamByName('_UF').Value := Uf;
     end;

     dm.QRY_relatorio.Parameters.ParamByName('_dta_ini').Value :=  DTP_data1.DateTime;
     dm.QRY_relatorio.Parameters.ParamByName('_dta_fim').Value :=  DTP_data2.DateTime;
     dm.QRY_relatorio.Open;

   if dm.QRY_relatorio.IsEmpty then
      begin
       ShowMessage('Não Existe Movimentação para esta Unidade');
        exit;
     end
  else
   QR_rel_paciente.QRLabel7.Caption:=unidade;
   QR_rel_paciente.QRLabel11.Caption:=unidade;
   QR_rel_paciente.Preview;
end;  // begin


No query está assim:
SELECT * FROM telemedicina
WHERE para = :Email 
AND 
data >= :dta_ini AND 
data <= :dta_fim
AND 
UF=:Uf


Na propriedade do paramentro de dta_ini e dta_fim, está assim: ftDateTime...
Marcos Barbosa

Marcos Barbosa

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

03/02/2011

altere a propriedade Time do componente DTP_data1 para 00:00:00 e do componete DTP_data2 para 23:59:59

GOSTEI 0
Marcos Barbosa

Marcos Barbosa

03/02/2011

Emerson, já está assim.
Bem eu faço uma importação do outlook e uso esse mesmo componente, lá ñ preciso usar parametro e consegui fazendo dessa forma:
StrFiltro:='[ReceivedTime] >= ' + QuotedStr(FormatDateTime('dd/MM/yyyy, hh:MM', DtPDtaMsg.DateTime))
+ 'AND [ReceivedTime]  <= ' + QuotedStr(FormatDateTime('dd/MM/yyyy, hh:MM', DtPDtaMsg1.DateTime));


Na importação tá funcionando, mas para o relatório não.

GOSTEI 0
José

José

03/02/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR