GARANTIR DESCONTO

Fórum Relatório de Aniversáriantes Por Período #337991

17/02/2007

0

Olá, pessoal !!, estou precisando da ajuda de vcs, o que esta pegando é o seguinte, eu preciso fazer um relatório de aniversáriantes por período, onde o usuário vai informar o dia/mês inicial e final, ai eu preciso listar todos os aniversáriantes dentro deste período, eu fiz um sql, só que não da certo quando eu coloco dias iguais com meses diferentes como por exemplo 01/02 a 01/03, este SQL que eu fiz, ele retorna somente as pessoas que fazem aniversário no dia 01/02 e 01/03, ele não tras o restante dos dias, ele teria que trazer todos os dias de fevereiro mais o dia 01/03, que seria o intervalo entre as duas datas. Eu estou extraindo o dia e o mês pela data de nascimento, abaixo segue o SQL que eu fiz :

SELECT *
FROM TB_Dizimista D
Where Extract(Month From D.Dizi_Nascimento) between :pa_MesIni And :pa_MesFin
AND Extract(Day From D.Dizi_Nascimento) Between :pa_DiaIni And :pa_DiaFin
AND Comu_Codigo = :pa_Comunidade
ORDER BY D.Dizi_Nascimento_Conjugue,D.Dizi_Nome
-------------------------------------------------------------------------------------

Obrigado Pessoal, abraço ! :? :?


Eliel_martins

Eliel_martins

Responder

Posts

17/02/2007

Corcos

Tenta assim

SELECT * FROM TABELA WHERE DATA_INI >= :DATA_INI AND DATA_FIM <= :DATA_FIM



Responder

Gostei + 0

17/02/2007

Eliel_martins

Tenta assim [quote:770ff7936c]SELECT * FROM TABELA WHERE DATA_INI >= :DATA_INI AND DATA_FIM <= :DATA_FIM
[/quote:770ff7936c]

É o seguinte, eu estou extraindo o Dia e Mês da data de Nascimento, então por isso não posso usar deste jeito ai não. Também no sistema sí informa o dia e o mês nao tem o ano, o ano não me interessa. Obrigado pela ajuda ai .


Responder

Gostei + 0

17/02/2007

Emerson Nascimento

eu faria assim:
SELECT
  *
FROM
  TB_Dizimista D
Where
  (Extract(Month From D.Dizi_Nascimento) +
   (Extract(Day From D.Dizi_Nascimento) / 100.00)) between
  
  (:pa_MesIni + (:pa_DiaIni / 100.00)) and
  (:pa_MesFin + (:pa_DiaFin / 100.0))

essa instrução irá extrair a data no formato MM.DD e também montará seus parâmetros no mesmo formato. assim a busca se dará de forma correta. não sei se há uma solução melhor, mas sei que essa funciona.


Responder

Gostei + 0

18/02/2007

Rinez

Faça assim:
Coloque dois datetimerpicker um com nome inicial e outro com nome final. Coloque um dbgrid e ligue ao seu datasource. Um speedbutton e:

procedure TF_aniversariantes.SpeedButton1Click(Sender: TObject);
var
dia,mes,ano:word;
dia2,mes2,ano2:word;
begin
if inicial.date>final.Date then begin
messagebox(handle,pchar(´Data Inválida´),pchar(´Aviso´),$00000030);
inicial.SetFocus;
exit;
end;
decodedate(inicial.Date,ano,mes,dia);
decodedate(final.Date,ano2,mes2,dia2);
if ano<>ano2 then begin
messagebox(handle,pchar(´Coloque o mesmo ano´),pchar(´Aviso´), $00000030);
inicial.SetFocus;
exit;
end;

cqaniv.Close;
TRY
with qaniv do begin
close;
sql.Clear;
IF MonthOf(INICIAL.date)=MonthOf(final.date) THEN BEGIN
SQL.ADD(´SELECT * FROM TEL where ´);
SQL.ADD(´(extract(month from DATAANIV) BETWEEN :MMES AND :MMES2) AND ´);
SQL.ADD(´(extract(month from DATAANIV) = :Mmes ´);
SQL.ADD(´and extract(day from DATAANIV) >= :Mdia) AND ´);
SQL.ADD(´(extract(month from DATAANIV) = :Mmes2 and ´);
SQL.ADD(´extract(day from DATAANIV) <= :Mdia2) order by NOME´);
END ELSE BEGIN
SQL.ADD(´SELECT * FROM TEL where ´);
SQL.ADD(´(extract(month from DATAANIV) BETWEEN :MMES AND :MMES2) or ´);
SQL.ADD(´(extract(month from DATAANIV) = :Mmes ´);
SQL.ADD(´and extract(day from DATAANIV) >= :Mdia) or ´);
SQL.ADD(´(extract(month from DATAANIV) = :Mmes2 and ´);
SQL.ADD(´extract(day from DATAANIV) <= :Mdia2) order by NOME´);
END;
Params.ParamByName(´Mmes´).Value := MonthOf(INICIAL.date);
Params.ParamByName(´Mdia´).Value := DayOf(INICIAL.date);
Params.ParamByName(´Mmes2´).Value := MonthOf(final.date);
Params.ParamByName(´Mdia2´).Value := DayOf(final.date);

OPEN;
end;
EXCEPT
ON E: EXCEPTION DO BEGIN

SHOWMESSAGE( ´ERRO LINHA tal´+#13+E.Message);
label6.Caption:=´´;
EXIT;
END; END;

CQANIV.Open;
if cqaniv.RecordCount=0 then
label6.Caption:=´Nada Encontrado´;
if cqaniv.RecordCount=1 then
label6.Caption:=´Encontrado: ´+inttostr(cqaniv.RecordCount)+´ aniversariante.´;
if cqaniv.RecordCount>1 then
label6.Caption:=´Encontrados: ´+inttostr(cqaniv.RecordCount)+´ aniversariantes.´;

end;

Espero ter ajudado


Responder

Gostei + 0

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

Aceitar