Fórum Relatório de Aniversáriantes Por Período #337991
17/02/2007
0
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
Curtir tópico
+ 0Posts
17/02/2007
Corcos
Gostei + 0
17/02/2007
Eliel_martins
É 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 .
Gostei + 0
17/02/2007
Emerson Nascimento
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.
Gostei + 0
18/02/2007
Rinez
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)