Fórum Ajuda com MonthCalendar #316884
21/03/2006
0
Peguei uma dica aqui do furum para marcar feriados em um componente MonthCalendar enviado pelo colega motta.
A minha dúvida é como fica o sql da qryFeriados, to quebrando a cabeça e não consigo montar, já que tenho no bd a tebela feriados com os campos data e descrição do feriado. segue a rotina:
procedure Tfrm1.MonthCalendarGetMonthInfo(Sender: TObject;
Month: Cardinal; var MonthBoldInfo: Cardinal);
var ano,mes,dia : word;
data : TDateTime;
x : array of cardinal;
i : integer;
begin
inherited;
// Marca com Bold os feriados cadastrados no Sistema
x := Nil;
try
DecodeDate(MonthCalendar.Date,ano,mes,dia);
// Só tem a variável Month para obter o ano pega-se
// o ano que está em MonthCalendar.Date, sendo que este é a posição
// anterior , por isto o tratamento abaixo
case Month of
1 : if mes = 12 then
ano := ano + 1;
12: if mes = 1 then
ano:= ano - 1;
end;
data := EncodeDate(ano,Month,1);
i := -1;
with qryFeriados do
begin
Close;
Params[0].AsDate := data;
Open;
if Eof then
Exit; //<<== Mês sem feriado
SetLength(x,RecordCount); // Tamanho do array
while not (Eof) do
begin
Inc(i);
x[i] := Fields[0].AsInteger;
Next;
end;
Close;
end;
MonthCalendar.BoldDays(x,MonthBoldInfo);
except
end;
end;
Stclara3107
Curtir tópico
+ 0Posts
21/03/2006
Motta
SELECT DATA FROM FERIADO
A coluna DATA deve ser do tipo Date (ou DateTime) , o TField no Delphi TDateTime , senão precisa de uma conversão.
______________________________________________
Gostei + 0
21/03/2006
Motta
Na verdade a query tem um parametro o mês a ser carregado, para simplificar fiz o parametro como TDateTime.
SELECT DATA FROM FERIADO WHERE EXTRACT(MONTH FROM DATA) = EXTRACT(MONTH FROM :PARAMDATA)
O resto é o mesmo o PARAMDATA é do Tipo Date.
____________________
Gostei + 0
10/11/2006
Edivaldo_ap
"Specified EXTRACT part does not exist in input datatype"
Minha tabela de feriados contém os campos:
TABLE FERIADOS ( COD_FERIADO INTEGER NOT NULL, DESCRICAO VARCHAR(40), DATA DATE NOT NULL, DIA VARCHAR(40), TIPO INTEGER;
Aqui o código da SQL
SELECT DATA FROM FERIADOS WHERE EXTRACT(MONTH FROM DATA) = EXTRACT(MONTH FROM :PARAMDATA)
E aqui o código da procedure
procedure TFormCalendario.CalendarioGetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); var ano, mes, dia: word; Data: TDateTime; x: array of cardinal; i: integer; begin inherited; // Marca com Bold os feriados cadastrados no Sistema x:= Nil; try DecodeDate(Calendario.Date, ano, mes, dia); // Só tem a variável Month para obter o ano pega-se // o ano que está em MonthCalendar.Date, sendo que este é a posição // anterior , por isto o tratamento abaixo case Month of 1: if mes = 12 then ano:= ano + 1; 12: if mes = 1 then ano:= ano - 1; end; Data:= EncodeDate(ano, Month, 1); i:= -1; with Consulta do Begin Close; Params[0].AsDate:= Data; Open; if Eof then Exit; //<<== Mês sem feriado SetLength(x, RecordCount); // Tamanho do array while not (Eof) do Begin Inc(i); x[i]:= Fields[0].AsInteger; Next; end; Close; end; Calendario.BoldDays(x, MonthBoldInfo); except end; end;
Calendario é o meu TMonthCalendar.
Se puder me ajudar eu desde já agradeço.
Gostei + 0
10/11/2006
Motta
Gostei + 0
10/11/2006
Edivaldo_ap
Firebird versão 2.0
Gostei + 0
13/11/2006
Motta
A solução e comparar o mesmo ano/mes da data com o do parametro para se obter os dias daquele mês com são feriados.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)