Fórum Lista de Aniversariantes não elimina falecidos #598765

22/11/2018

0

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

Responder

Posts

23/11/2018

Alex William

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
Responder

Gostei + 0

23/11/2018

Emerson Nascimento

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

Gostei + 0

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

Aceitar