kartter Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Problema com dataO problema é o seguinte::estou migrando meu bd para interbase, e criei um campo "data", do tipo "timestamp".Este tipo "timestamp", guarda dia e hora, portanto quando eu vou fazer um consulta sql, do tiposelect * from cadcli where data>=DateTimePicker1.asdatetime and data data<=DateTimePicker2.asdatetimeSupondo que o valor das variáveis seja:data=15/11/2006;DateTimePicker1.asdatetime=15/11/2006DateTimePicker2.asdatetime=15/11/2006O correto seria retornar o registro certo? Porém não está retornando. Suponho que seja pelo fato de quepelo tipo do campo "data" ser timestamp, ele faz a comparação com a hora também. Gostaria de saber se temcomo, na consulta sql, eu pegar só a data da variável do tipo "timestamp" e não a data e a hora.valeu!!!Kartter Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Novembro 14, 2006 Denunciar Share Postado Novembro 14, 2006 Olá kartter,Trabalhar com data sempre foi um problema mesmo, no caso faz o seguinte, crie duas variaveis do tipo string pra pegar essa data do DateTimePicker pra passar como parametro, e no caso de buscar ser por intervalode data você pode usar o comando BETWEEN.var datainicio, datafim : string; begin datainicio := DateToStr(DateTimePicker1.Date); datafim := DateToStr(DateTimePicker2.Date); IBQuery.Close; IBQuery.Sql.Clear; IBQuery.Sql.Add('select * from cadcli where data between cast('+''''+datainicio+''''+' AS DATE) and cast('+''''+datafim+''''+' AS DATE)'); IBQuery.Open;Abs. Progr'amador. B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 17, 2006 Denunciar Share Postado Novembro 17, 2006 Progr'amador, permita-me "fazer um parênteses" neste item.Um cuidado que deve-se ter quando trabalhamos com campos que armazenam data e hora juntamente (como o TimeStamp), e justamente em situações como esta: você faz um filtro onde o campo deve encontrár-se entre duas datas e que neste caso é a mesma. Bom, se está sendo armazenada a hora juntamente com a data, passar para esta consulta apenas a data, implica que o campo hora estará sendo referenciado com 00:00hs. Assim, para registros com o campo data contenha a data filtrada mas que tenha em sí um registro de hora diferente de 00:00hs não serão listados!Ex. data = 15/11/2006 00:25 -> não será listado para a consulta no exemplo do colega kartter. E este pode ser também o problema que ele aponta.Nestas condições, tendo em mente a questão da hora, é conveniente que seja concatenada a data, as referidas horas de início e fim do dia em questão:Ex. DataInicio = 15/11/2006 e DataFim = 15/11/2006 23:59:59kartter, você pode fazer uso da função DateTimeToTimeStamp(DateTime: TDateTime) - SysUtils, quando precisar fazer a conversão.Particularmente, sou avesso a utilização do método de concatenação de variáveis para montar uma cláusula SQL. Prefiro a utilização de parâmetros. No caso especíifico de data, acho ainda mais interessante, já que existem diferentes formas de concatenar este tipo de campo para cada banco que você utiliza (ou seja não há um padrã). No Access por ex. você deve delimitar o texto da data utilizando o # (data between #15/11/2006#) em outros, a ordem mm/dd/aaaa é esperada. E assim vai. Quando você utiliza parâmetros, esta "preocupação" fica por conta do drive que acessa o banco. Dá uma olhada neste outro post se tiver enteresse.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kartter Postado Novembro 17, 2006 Autor Denunciar Share Postado Novembro 17, 2006 valeu mesmo Progr'amador e Micheus !! Muito útil as dicas!! Problema resolvido!valeu!!!Kartter :lol: Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
kartter
Problema com data
O problema é o seguinte::
estou migrando meu bd para interbase, e criei um campo "data", do tipo "timestamp".
Este tipo "timestamp", guarda dia e hora, portanto quando eu vou fazer um consulta sql, do tipo
select * from cadcli where data>=DateTimePicker1.asdatetime and data data<=DateTimePicker2.asdatetime
Supondo que o valor das variáveis seja:
data=15/11/2006;
DateTimePicker1.asdatetime=15/11/2006
DateTimePicker2.asdatetime=15/11/2006
O correto seria retornar o registro certo? Porém não está retornando. Suponho que seja pelo fato de que
pelo tipo do campo "data" ser timestamp, ele faz a comparação com a hora também. Gostaria de saber se tem
como, na consulta sql, eu pegar só a data da variável do tipo "timestamp" e não a data e a hora.
valeu!!!
Kartter
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.