consulta usando data
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: :(
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
Curtidas 0
Respostas
Ildefonso
08/05/2003
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:
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)
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)
GOSTEI 0