Cadastrar todos os domingos
03/02/2006
0
gostaria de selecionar um período por exemplo:
01/01/2006
31/12/2006
e ao clicar no botão ele preencher a minha tabela de feriados com todos os domingos (datas) existentes entre elas!
Paullsoftware
Posts
03/02/2006
Cabelo
assim :
v_range := v_data_final - v_data_inicial;
for v_i := 0 to round(v_range) - 1 do
begin
if dayofweek(v_data_inicial) = 1 then
begin
P_grava_data;
end;
v_data := v_data_inicial + 1;
end;
03/02/2006
Aroldo Zanela
Acho que isso é gastar espaço desnecessário em disco, pois você recupera essa informação por meio de função, mas uma solução é:
var dInicio, dTermino: TDateTime; I, X: Integer; begin dInicio := StrToDate(´01/01/2006´); dTermino := StrToDate(´31/12/2006´); X := Trunc(dTermino - dInicio); for I := 1 to X do begin if DayOfWeek(dInicio+i)=1 then GravarDomingo(DateToStr(dInicio+i)); end; end;
03/02/2006
Paullsoftware
????
valeu a intensão, mais não entendi nada...
usando essa rotina consigo cadastrar todos os domingos do ano??
não entendi alguns pontos
sei que
[b:a1c43e4c81]v_range, v_data_final,v_data_inicial,_grava_data [/b:a1c43e4c81] podem ser variaveis do tipo ´DOUBLE´ mais ondem vc passa o valor para:
[b:a1c43e4c81] P_grava_data; [/b:a1c43e4c81]
ta meio vago!
03/02/2006
Weber
Talvez de para aproveitar em seu código.
function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer; var dDtTemp: TDateTime; function VerFeriados(DtAtual, DtVencto: ShortString): Boolean; var Ano, Mes, Dia: Currency; c,n,k,i,j,l: Currency; cFeriados: TStringList; dDtTemp: TDateTime; nI, nY: Integer; begin Ano := StrToInt(Trim(Copy(DtAtual,7,4))); c := Trunc(Ano / 100); n := Ano - (19 * Trunc(Ano / 19)); k := Trunc((c - 17) / 25); i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15; i := i - (30*Trunc(i/30)); i := i - (Trunc(i/28)*(1-Trunc(i/28))*Trunc(29/(i+1))*Trunc((21-n)/11)); j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4); j := j - (7*Trunc(j/7)); l := i - j; Mes := 3 + Trunc((l+40)/44); Dia := l + 28 - (31*Trunc(Mes/4)); cFeriados := TStringList.Create; cFeriados.Add(FormatDateTime(´dd/mm´,StrToDate(CurrToStr(Dia)+´/´+CurrToStr(Mes)))); //Pascoa cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), -2))); //6.Santa cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]),-47))); //Carnaval cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), 60))); //Corpus Crhist cFeriados.Add(´01/01´); //Ano Novo cFeriados.Add(´21/04´); //Tiradentes cFeriados.Add(´01/05´); //Trabalho cFeriados.Add(´07/09´); //Indenpencia cFeriados.Add(´12/10´); //N.Senhora cFeriados.Add(´02/11´); //Finados cFeriados.Add(´15/11´); //Replublica cFeriados.Add(´25/12´); //Natal cFeriados.Add(´10/05´); //Aniversario de Maringa cFeriados.Add(´15/08´); //Padroeira de Maringa dDtTemp := StrToDate(DtAtual); dDtTemp := IncDay(dDtTemp, -1); while dDtTemp >= StrToDate(DtVencto) do //domingos e sabado if (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) then begin cFeriados.Add(FormatDateTime(´dd/mm´,dDtTemp)); dDtTemp := IncDay(dDtTemp, -1); end else Break; Result := False; dDtTemp := StrToDate(DtVencto); for nI := 0 to cFeriados.Count -1 do if cFeriados[nI] = FormatDateTime(´dd/mm´,dDtTemp) then begin for nY := 0 to cFeriados.Count -1 do if cFeriados[nY] = FormatDateTime(´dd/mm´,IncDay(StrToDate(DtAtual), -1)) then begin Result := True; Break; end; if Result then Break; end; cFeriados.Free; end; begin Result := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto)); if StrToDate(DtAtual) <= StrToDate(DtVencto) then Result := 0 else begin dDtTemp := StrToDate(DtVencto); while StrToDate(DtAtual) > dDtTemp do begin if VerFeriados(DtAtual,DateToStr(dDtTemp)) then begin Result := Result - 1; dDtTemp := IncDay(dDtTemp, 1); end else Break; end; end; end;
03/02/2006
Cabelo
????
valeu a intensão, mais não entendi nada...
usando essa rotina consigo cadastrar todos os domingos do ano??
não entendi alguns pontos
sei que
[b:189b6a3248]v_range, v_data_final,v_data_inicial,_grava_data [/b:189b6a3248] podem ser variaveis do tipo ´DOUBLE´ mais ondem vc passa o valor para:
[b:189b6a3248] P_grava_data; [/b:189b6a3248]
ta meio vago![/quote:189b6a3248]
var v_range, v_data_final, v_data_inicial : TDateTime
P_Grava_Data; Rotina onde vc insere o domingo no BD... como vc está gravando ? Se for um campo do Tipo Date, vc passa o parâmetro nesta procedure para gravar a data que será o domingo....
18/02/2006
Marco Salles
function VerData(data:TDate):boolean; begin result:=((Trunc(Data) - 1) mod 7 = 0); end;
procedure TForm1.Button1Click(Sender: TObject); begin if Verdata(strtodate(edit1.text)) then showmessage(´é domingo´) else showmessage(´não é´); end;
Clique aqui para fazer login e interagir na Comunidade :)