Usuário com melhor resposta
Select de intervalos de horas na query

Pergunta
-
Seguinte, preciso fazer um select de datas.
Só que por exemplo, preciso que apareçam na query apenas as datas de um intervalo escolhido pelo usuário. Ex: de 12/8/2010 até 20/8/2010, mas apenas datas que estão dentro desse intervalo que sejam das 9hs até 18hs.
Qual o melhor jeito de fazer isso? Query e uma sub-query?
E outra coisa, um extra, alguém sabe de algum lugar q explique como eu posso fazer para montar via Código uma planilha em excel com os dados de uma query? Como se fosse um formulário? O Export do access 2007 para excel não funciona direito, e tenho q achar um outro caminho.
Access 2007.
Grato Felipe Carvalho.
quinta-feira, 26 de agosto de 2010 18:09
Respostas
-
Olá Felipe,
depende de como está a tabela. Se data e hora estão em campos separados, o SELECT sugerido pelo amigo Bruno deve resolver. Porém, se estiverem em um único campo (que é o mais comum), você pode desmembrá-los usando as seguintes regras:
a) a data é a parte inteira do Data/Hora
b) a hora é a parte decimal do Data/Hora.
Portanto, ficaria algo assim:
SELECT * FROM TuaTabela
WHERE Fix(TeuCampoData) BETWEEN #08/12/2010# AND #08/20/2010# AND TeuCampoData - Fix(TeuCampoData) BETWEEN #9:00# AND #18:00#
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br- Marcado como Resposta Luiz Cláudio - MVPModerator terça-feira, 31 de agosto de 2010 00:18
sexta-feira, 27 de agosto de 2010 02:53Moderador
Todas as Respostas
-
Lipe use o Between
Por exemplo
select * from SuaTabela Where [Data] Between #08/12/2010# and #08/20/2010# and [Hora] between #9:00:00# and #18:00:00#
Para montar uma planilha Excel , crie um recordset , passe o seu recordset como parametro para esta sub, por exemploGeraPlan SeuRecordset
Sub GeraPlan(rs as recordset) dim Ex as Object dim wb as object set ex = createobject("Excel.Application") set wb= ex.workbooks.add ex.visible=true for i=0 to rs.fields.count-1 wb.sheets(1).range("A1").offset(0,i)=rs(i).name next i wb.sheets(1).range("A2").copyfromrecorset rs End Sub
teste ai e qqer coisa fale.
Att
Bruno Silva Leite Office Developerquinta-feira, 26 de agosto de 2010 23:08 -
Olá Felipe,
depende de como está a tabela. Se data e hora estão em campos separados, o SELECT sugerido pelo amigo Bruno deve resolver. Porém, se estiverem em um único campo (que é o mais comum), você pode desmembrá-los usando as seguintes regras:
a) a data é a parte inteira do Data/Hora
b) a hora é a parte decimal do Data/Hora.
Portanto, ficaria algo assim:
SELECT * FROM TuaTabela
WHERE Fix(TeuCampoData) BETWEEN #08/12/2010# AND #08/20/2010# AND TeuCampoData - Fix(TeuCampoData) BETWEEN #9:00# AND #18:00#
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br- Marcado como Resposta Luiz Cláudio - MVPModerator terça-feira, 31 de agosto de 2010 00:18
sexta-feira, 27 de agosto de 2010 02:53Moderador -
É, minha data fica em um único campo. mas cheguei em uma limitação técnica quanto a desmebrá-lo.
Uso DatePart Function? Ou pesquisei tb o CONVERT mas não sei como aplicá-lo. O DatePart Funciton aparentemente não me apresenta erro algum mas tb não me retorna nenhum resultado.
Usei ele assim:
WHERE (([RCC_data]![Service Date] Between [Forms]![RCC_Access test]![Date1] And [Forms]![RCC_Access test]![Date2] And DatePart("hh",[RCC_data]![Service Date]) Between #9:0:0# And #18:0:0#)
Quanto ao formulário, ainda não usei a idéia do amigo, não tive tempo mas com certeza tentarei!
Grato
Felipe Carvalho
sexta-feira, 27 de agosto de 2010 19:12 -
Na query, por que não tenta a sugestão que postei acima (usar a função Fix)?
Sua base de dados é Access ou SQL Server? Convert é função do SQL Server.
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.brsábado, 28 de agosto de 2010 01:55Moderador -
Cara a solução com a função fix funcionou!!!!! Muito obrigado!!!!!
Mas agora tenho uma nova dúvida, mas não sei se abro um novo tópico.
Então lá vai. O que aconteceu agora, ele selecionou dentro do intervalo de dias e no intervalo de horário determinado. Mas tenho um novo problema, as vezes a mesma pessoa possui 3 linhas com horários diferentes no mesmo dia, mas eu desejo q essa pessoa apareça apenas uma vez por dia nos resultados. Acho q a explicação não fico muito boa hehehehehe.
O que acontece..... faço um relatório que mostra os resultados por dia, mas as vezes no mesmo dia tenho a mesma pessoa aparecendo várias vezes pq ela tem 3 horários diferentes no mesmo dia. o que eu quero é q ela apareça só uma vez. Portanto na hora q mostro no relatorio nao me importa a hora mas apenas o dia.
Como posso fazer isso.
O relatório pela instrução VB vou tentar essa segunda.
Grato Felipe Carvalho.
segunda-feira, 30 de agosto de 2010 01:49 -
Olá,
você pode criar uma query agrupada por dia. Você pode, por exemplo, pegar o primeiro (ou o último) dos três registros.
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.brterça-feira, 31 de agosto de 2010 00:24Moderador