Fórum consulta usando data #158786

08/05/2003

0

tenho um combobox aonde estão definidos alguns itens como: 1 mês, 2 meses, 3 meses, etc, e tenho que fazer uma consulta num BD ACCESS tendo essas itens do combo como parâmetro de data.
Ex.: quando o usuário escolher 1 mês todos os registros de hoje a trinta dias passados deverão ser selecionados.
HELP ME!!! PLEASE!!!

:cry: :(


Tostão

Tostão

Responder

Posts

08/05/2003

Ildefonso

Olá, Tostão.

Você sabe que existe um tipo de dado TDateTime?
Com ele você usará a função IncMonth() que incrementa ou decrementa um valor TDateTime no lapso de um mês.

Com isso você contrói uma função que gere a SQL. Um exemplo:
  procedure MakeSQL;
   var
     dtZero, dtFim: TDateTime;
     expr: String;
     lapso: Integer;
   begin
     lapso  := cbxLapso.ItemIndex + 1;
     dtFim  := Date();
     dtZero := IncMonth(dtZero, -lapso);
     expr   := ´SELECT * FROM ContasPR´ +
               ´ WHERE ([DataFatura] >= ´ + FormatDateTime(´""MM/DD/YYYY""´, dtZero) +
               ´ AND [DataFatura] < ´ + FormatDateTime(´""MM/DD/YYYY""´, dtFim+1) + ´);´;
    sqlFiltro.Close;
    sqlFiltro.SQL.Clear;
    sqlFiltro.SQL.Add(expr);
    sqlFiltro.Open;
  end;


Neste exemplo uso o cbxLapso.ItemIndex (cbxLapso é um TComboBox) para saber qual foi a opção de lapso de tempo e sai calculando o resto.

Note que ao formatar as datas na SQL, uso o modo americano de apresentação: mês/dia/ano... este é o padrão e o delimitador grade (#) é necessário para informar que se trata de uma data, não de uma expressão numérica.

Herdando a sintaxe do Access e do MS-SQL Server, uso sempre os nomes de campos entre colchetes ([...]) : fica mais claro. E por uma questão de performance do interpretador, coloco a expressão da cláusula WHERE entre parênteses.

Finalmente, lembre-se que Date() dá a data de hoje à zero hora, ou a meia noite. Como uma data pode ter uma parte fracionada, indicando horas naquela data, uso o subterfúgio de comparar a data inicial com >= (maior ou igual a) e a data final eu jogo para a meia noite do dia seguinte, mas comparo com < (menor que)... fica perfeito. Em meus sistemas, quando armazeno uma data automaticamente, tal como a data de uma fatura, uso a função Now() que retorna a data e a hora do momento. Para referências posteriores fica muito melhor. Conforme o horário gravado, fico sabendo até quem deveria estar operando o micro.

Bom trabalho. 8)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar