Ajuda com MonthCalendar

Delphi

21/03/2006

Ola, amigos
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

Stclara3107

Curtidas 0

Respostas

Motta

Motta

21/03/2006

a query é simples ....

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
Motta

Motta

21/03/2006

Não ....

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
Edivaldo_ap

Edivaldo_ap

21/03/2006

Motta, peguei o código que vc postou e também a SQL para colocar na qryFeirados, que no meu caso é Consulta mas da um erro quando executo e não sei como resolver será que poderia me ajudar o erro é o seguinte

"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
Motta

Motta

21/03/2006

Deveria funcionar, qual o bd ?


GOSTEI 0
Edivaldo_ap

Edivaldo_ap

21/03/2006

To utilizando o

Firebird versão 2.0


GOSTEI 0
Motta

Motta

21/03/2006

Não sei se esta verão versão do FB suporta esta sintexe : Extract

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
POSTAR