Lista de Aniversariantes não elimina falecidos

Delphi

22/11/2018

Olá amigos, estou com um probleminha para eliminar da lista de aniversariantes da semana os registros de pessoas já falecidas. Na tabela de cadastro tenho um campo "status", com as opções ativo, inativo, ausente, impossibilitado, desligado e falecido. Quando alguém morre, mudamos o status para "falecido".

Mas quando consulto os aniversariantes da semana, ele retorna também os falecidos. Meu código tá assim:

if monthOf(Datetimepicker1.DateTime) <= monthOf(Datetimepicker2.DateTime) then
begin
//Realiza a consulta
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT * FROM CadPessoas');
AdoQuery1.SQL.Add('WHERE ((Month(DtNasc) * 100) + Day(DtNasc)) between :pinicial and :pfinal');
ADOQuery1.SQL.add(' and Status <> (' + QuotedStr('Falecido') +')');
AdoQuery1.SQL.Add('Order by DtNasc');
AdoQuery1.Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date);
AdoQuery1.Parameters.ParamByName('pfinal').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date);
Adoquery1.Open;
end
else
begin
AdoQuery1.Close; 
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT * FROM CadPessoas');
AdoQuery1.SQL.Add('WHERE ((Month(DtNasc) * 100) + Day(DtNasc)) between :pinicial and :pfinal');
AdoQuery1.SQL.Add('or ((Month(DtNasc) * 100) + Day(DtNasc)) between :pinicial2 and :pfinal2');
ADOQuery1.SQL.add(' and Status <> (' + QuotedStr('Falecido') +')');
AdoQuery1.SQL.Add('Order by DtNasc');
AdoQuery1.Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date);
AdoQuery1.Parameters.ParamByName('pfinal').Value := 1231;
AdoQuery1.Parameters.ParamByName('pinicial2').Value := 101;
AdoQuery1.Parameters.ParamByName('pfinal2').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date);
Adoquery1.Open;
end;


O que pode estar errado?
Edilson Santiago

Edilson Santiago

Curtidas 0

Respostas

Alex William

Alex William

22/11/2018

O filtro de data com BETWEEN tem que ser o ultimo parametro do WHERE.

Qualquer parametro depois do BETWEEN o SQL interpreta como parte dele.

Varias queries que eu fiz ja deram esse problema.

Espero ter ajudado. :D
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/11/2018

Qual é o banco de dados utilizado? A query, transcrita exatamente como está no código Delphi, funciona diretamente no banco de dados?
GOSTEI 0
POSTAR