locked
Select de intervalos de horas na query RRS feed

  • 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
    sexta-feira, 27 de agosto de 2010 02:53
    Moderador

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 exemplo

    GeraPlan 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 Developer
    quinta-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
    sexta-feira, 27 de agosto de 2010 02:53
    Moderador
  • É, 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.br
    sábado, 28 de agosto de 2010 01:55
    Moderador
  • 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.br
    terça-feira, 31 de agosto de 2010 00:24
    Moderador