Array
(
)

Consulta de datas (Aniversariantes da semana)

Mahdak
   - 08 mar 2006

Olá pessoal. estou com um problema aqui. Gostaria de faszer uma consulta na minha tabela
da seguinte maneira:


consulta:
-----------------------------------------------------------------------

´selecione todos os Eleitores que fazem aniversário na semana atual´

-----------------------------------------------------------------------


- Para selecionar Todos os aniversariantes do dia eu fiz o seguinte:
#Código


DM.Tbl_Eleitores.Close;
DM.Tbl_Eleitores.SelectSQL.Clear;
DM.Tbl_Eleitores.SelectSQL.Add(´SELECT * FROM ELEITORES WHERE NASCIMENTO = :hoje ´);
DM.Tbl_Eleitores.Params[0].AsString;
DM.Tbl_Eleitores.ParamByName(´hoje´).AsDateTime:= Date;
DM.Tbl_Eleitores.Open;


- Porém a consulta de aniversariantes da semana nao tenho idéia de como fazer


Delphi: 7
Banco : Firebird 1.5


para isso eu teria que filtrar caracteres ou fazer algum calculo?
Se alguem tiver um exemplo ai pra eu me guiar, por favor, postem aqui.

Abraços!


Motta
   - 08 mar 2006

Veja se isto ajuda :

http://forum.devmedia.com.br/viewtopic.php?t=59365&start=0&sid=ff4325b5c70a5f7e442f5478e0bcbef9


Mahdak
   - 08 mar 2006

ok, vou dar uma olhada e ja dou retorno... po enquanto queria concertar o que disse logo acima em relação aos aniversariantes do dia...

#Código


var
StrDia,StrMes :string;
Ano, Mes, Dia : word;
begin
DecodeDate(Now, Ano, Mes,Dia);
StrDia := IntToStr(Dia);
StrMes := IntToStr(Mes);
DM.Tbl_Eleitores.Close;
DM.Tbl_Eleitores.SelectSQL.Clear;
DM.Tbl_Eleitores.SelectSQL.Add(´SELECT * FROM ELEITORES WHERE Extract(Day From NASCIMENTO) = ´+ StrDia + ´ AND Extract(Month From Nascimento)= ´+StrMes);
DM.Tbl_Eleitores.Open;

end;



Mahdak
   - 09 mar 2006

Pessoal, questão resolvida
-------------------------------

Aniversáriantes entre duas datas:
---------------------------------------

#Código


{ filtro para pegar apenas o dia do Mask Edit}
function RetornaDia(Valor: string): string;
var
PosicaoPonto: integer;
begin
PosicaoPonto := Length(Valor);

while (Valor[PosicaoPonto] <> ´/´) and (PosicaoPonto >= 1) do
dec(PosicaoPonto);

result := Copy(Valor, PosicaoPonto - 2, Length(Valor) - PosicaoPonto);
end;

{ filtro para pegar apenas o Mes do Mask Edit}
function RetornaMes(Valor: string): string;
var
PosicaoPonto: integer;
begin
PosicaoPonto := Length(Valor);

while (Valor[PosicaoPonto] <> ´/´) and (PosicaoPonto >= 1) do
dec(PosicaoPonto);

result := Copy(Valor, PosicaoPonto + 1, Length(Valor) + PosicaoPonto);
end;


procedure TED.Btn_OKClick(Sender: TObject);
var
StrDia1,StrMes1,StrDia2,StrMes2 :string;

begin
// Data1 e Data2 sao MaskEdits com as mascaras: !99/99;1;_
StrDia1 := RetornaDia(Data1.Text);
StrMes1 := RetornaMes(Data1.Text);
StrDia2 := RetornaDia(Data2.Text);
StrMes2 := RetornaMes(Data2.Text);

DM.Tbl_Eleitores.Close;
DM.Tbl_Eleitores.SelectSQL.Clear;
DM.Tbl_Eleitores.SelectSQL.Add(´SELECT * FROM ELEITORES WHERE Extract(Day From NASCIMENTO) BETWEEN ´+ StrDia1 + ´ AND ´ + StrDia2 + ´ AND Extract(Month From Nascimento) BETWEEN ´+ StrMes1 + ´ AND ´ + StrMes2);
DM.Tbl_Eleitores.Open;

RelatEleitores.Label_Eleitores.Caption := ´Relatório de Aniversariantes entre o período de: ´+ Data1.Text + ´à ´ + Data2.Text ;
RelatEleitores.QuickRep1.Preview;


end;




Espero ter ajudado, aqui funcionou certinho...

Abraço a todos!


Motta
   - 09 mar 2006

Tem certeza ?

Testou entre datas com 2 meses , por exemplo :

26/02/2006 até 04/03/2006

___________________


Kesleyboletti
|
MVP
Pontos: 5
    29 dez 2015

Boa essa. e como seria o sql para essa situação entre datas com 2 meses , por exemplo : 26/02/2006 até 04/03/2006

P2
   - 30 dez 2015

Bom dia,

VAR
CONV_DE:STRING;
CONV_ATE:STRING;
SCRIPT_SELECT:STRING;

COLOQUE DOIS DATEPICKER COM OS NOMES
DE_DATA
ATE_DATA


NO BUTTON DE PESQUISA FAÇA O SEGUINTE

CONV_DE:='';
CONV_ATE:='';
SCRIPT_SELECT:='';



CONV_DE:=DateToStr(DE_DATA.Date); //AQUI VAI PEGAR A DATA INFORMADA NO DATE PICKER (DE_DATA) E PREENCHER EM STRING.
CONV_ATE:=DateToStr(ATE_DATA.Date);//AQUI VAI PEGAR A DATA INFORMADA NO DATE PICKER (ATE_DATA) E PREENCHER EM STRING.


CONV_DE:=StringReplace(CONV_DE,'/','.', [rfReplaceAll, rfIgnoreCase]); // AQUI SUBSTITUÍMOS A '/' POR '.'
CONV_ATE:=StringReplace(CONV_ATE,'/','.', [rfReplaceAll, rfIgnoreCase]); // AQUI SUBSTITUÍMOS A '/' POR '.'



SCRIPT_SELECT:='SELECT * FROM ELEITORES WHERE NASCIMENTO BETWEEN '''
+CONV_DE+''' AND '''
+CONV_ATE+''''+

DM.Tbl_Eleitores.Close;

DM.Tbl_Eleitores.SelectSQL.Clear;

DM.Tbl_Eleitores.SelectSQL.TEXT:='SCRIPT_SELECT';

DM.Tbl_Eleitores.Open;