Dúvidas e Esclarecimentos
Olá galera, saudações!
Eu pegue esse código abaixo na internet e ele me trás todos os aniversariantes do mês, realmente atendeu a minha necessidade.
Entretanto, por ser iniciante em Delphi/SQL não consegui entender como o mesmo funciona, ou seja, eu quero aprender a programar e não apenas copiar e colar!
with dm.adoquery1 do
begin
SQL.Clear;
SQL.Add('SELECT ID, DESCRICAO, FUNC_DTADMISSAO FROM CLIENTE');
SQL.Add('WHERE ((Month(FUNC_DTADMISSAO) * 100) + Day(FUNC_DTADMISSAO)) between :pinicial and :pfinal'); // por qual motivo está multiplicando por 100?
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date); //por qual motivo está multiplicando por 100?
Parameters.ParamByName('pfinal').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date); //por qual motivo está multiplicando por 100?
Open;
end;
eu estou começando a trabalhar com datas agora e não tenho experiencia no assunto.
Se alguém puder me esclarecer ficarei muito grato.
Eu pegue esse código abaixo na internet e ele me trás todos os aniversariantes do mês, realmente atendeu a minha necessidade.
Entretanto, por ser iniciante em Delphi/SQL não consegui entender como o mesmo funciona, ou seja, eu quero aprender a programar e não apenas copiar e colar!
with dm.adoquery1 do
begin
SQL.Clear;
SQL.Add('SELECT ID, DESCRICAO, FUNC_DTADMISSAO FROM CLIENTE');
SQL.Add('WHERE ((Month(FUNC_DTADMISSAO) * 100) + Day(FUNC_DTADMISSAO)) between :pinicial and :pfinal'); // por qual motivo está multiplicando por 100?
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date); //por qual motivo está multiplicando por 100?
Parameters.ParamByName('pfinal').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date); //por qual motivo está multiplicando por 100?
Open;
end;
eu estou começando a trabalhar com datas agora e não tenho experiencia no assunto.
Se alguém puder me esclarecer ficarei muito grato.
Silas Santos
Curtidas 0
Respostas
Joel Rodrigues
07/09/2013
Cara, seria necessário ver onde você pegou esse código, mas de início já te digo o seguinte: você pode trabalhar diretamente com datas, sem precisar dar essa volta toda.
GOSTEI 0
Marcos Saffran
07/09/2013
Olá silas,
pelo que entendi o pinicial e o pfinal estão no formato MMDD (mês dia), mas como numéricos, portanto a multiplicação por 100 do mês é para separar do dia, por exemplo no período inicial de 01 de maio a 31 de maio, o pinicial ficará 501 e o pfinal 531, se fosse para o mês de dezembro, o pinicial ficará 1201 e o pfinal 1231.
Acredito que essa função foi criada para evitar o uso de variáveis para o início e fim de mês e de dia (pmesinicial, pmesfinal, pdiainicial e pdiafinal).
Se você busca todos em determinado mês, fica mais fácil assim:
SQL.Add('WHERE Month(FUNC_DTADMISSAO) = :pmes');
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pmes').Value := MonthOf(datetimepicker1.Date);
SQL.Add('SELECT ID, DESCRICAO, FUNC_DTADMISSAO FROM CLIENTE');
SQL.Add('WHERE ((Month(FUNC_DTADMISSAO) * 100) + Day(FUNC_DTADMISSAO)) between :pinicial and :pfinal'); // por qual motivo está multiplicando por 100?
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date); //por qual motivo está multiplicando por 100?
Parameters.ParamByName('pfinal').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date); //por qual motivo está multiplicando por 100?
SQL.Add('WHERE ((Month(FUNC_DTADMISSAO) * 100) + Day(FUNC_DTADMISSAO)) between :pinicial and :pfinal'); // por qual motivo está multiplicando por 100?
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pinicial').Value := MonthOf(datetimepicker1.Date) * 100 + DayOf(datetimepicker1.Date); //por qual motivo está multiplicando por 100?
Parameters.ParamByName('pfinal').Value := MonthOf(datetimepicker2.Date) * 100 + DayOf(datetimepicker2.Date); //por qual motivo está multiplicando por 100?
pelo que entendi o pinicial e o pfinal estão no formato MMDD (mês dia), mas como numéricos, portanto a multiplicação por 100 do mês é para separar do dia, por exemplo no período inicial de 01 de maio a 31 de maio, o pinicial ficará 501 e o pfinal 531, se fosse para o mês de dezembro, o pinicial ficará 1201 e o pfinal 1231.
Acredito que essa função foi criada para evitar o uso de variáveis para o início e fim de mês e de dia (pmesinicial, pmesfinal, pdiainicial e pdiafinal).
Se você busca todos em determinado mês, fica mais fácil assim:
SQL.Add('WHERE Month(FUNC_DTADMISSAO) = :pmes');
SQL.Add('Order by FUNC_DTADMISSAO');
Parameters.ParamByName('pmes').Value := MonthOf(datetimepicker1.Date);
GOSTEI 0
Silas Santos
07/09/2013
Ola, Marcos Alfredo Saffran.
Obrigado por esclarecer minha dúvida, ajudou muito e com esses códigos que passou ficou bem mais simples!
Valeu, um abraço!
Obrigado por esclarecer minha dúvida, ajudou muito e com esses códigos que passou ficou bem mais simples!
Valeu, um abraço!
GOSTEI 0