Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Barbosa

relatório por período de data

Recommended Posts

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se os campos de data no banco de dados são do tipo TIMESTAMP, em caso afirmativo ele armazenará a data e a hora então seu filtro pode falhar. Você terá que utilizar a função CAST, ficaria assim:

 

dm.QRY_relatorio.SQL.Add(' and CAST(data AS DATE) BETWEEN :_dta_ini and :_dta_fim');

 

Tente isto.

 

Um abraço,

 

 

Fernando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por enquanto estou usando o ACCESS, e lá está como DATA / HORA, mas preciso assim pq os dados gravados são importados do OUTLOOK, e preciso saber a data e hora da mensagem.

 

Vou testar aki agora essa dica q você me passou.

 

Vlw.

 

Verifique se os campos de data no banco de dados são do tipo TIMESTAMP, em caso afirmativo ele armazenará a data e a hora então seu filtro pode falhar. Você terá que utilizar a função CAST, ficaria assim:

 

dm.QRY_relatorio.SQL.Add(' and CAST(data AS DATE) BETWEEN :_dta_ini and :_dta_fim');

 

Tente isto.

 

Um abraço,

 

 

Fernando

 

Da erro quando executo a função:

"Instrução SQL inválida. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' esperado."

 

 

Por enquanto estou usando o ACCESS, e lá está como DATA / HORA, mas preciso assim pq os dados gravados são importados do OUTLOOK, e preciso saber a data e hora da mensagem.

 

Vou testar aki agora essa dica q você me passou.

 

Vlw.

 

Verifique se os campos de data no banco de dados são do tipo TIMESTAMP, em caso afirmativo ele armazenará a data e a hora então seu filtro pode falhar. Você terá que utilizar a função CAST, ficaria assim:

 

dm.QRY_relatorio.SQL.Add(' and CAST(data AS DATE) BETWEEN :_dta_ini and :_dta_fim');

 

Tente isto.

 

Um abraço,

 

 

Fernando

 

Da erro quando executo a função:

"Instrução SQL inválida. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' esperado."

 

Da erro quando executo a função:

"Instrução SQL inválida. 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' esperado."

 

Na realidade eu me enganei em relação ao erro, ele dá "Erro não especificado".

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 CAST(data AS DATE) BETWEEN :_dta_ini and :_dta_fim');
     dm.QRY_relatorio.SQL.Add(' ORDER BY data');

    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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.