Lista de Aniversariantes não elimina falecidos
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:
O que pode estar errado?
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
Curtidas 0
Respostas
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
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
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