TRABALHANDO COM DATAS

02/07/2009

Amigos,

Estou utilizando um banco da dados ms ACCESS para armezanar meus dados,

possuo uma tabela de historico e gostaria de preecher uma GridView com os dados desta tabela,


Anteriormente esta utilizado o SQL Server com esta Sintaxe:

string strsql = "SELECT * FROM TBL_HISTORICO WHERE CAST(FLOOR(CAST(PROXCONTATO_HIST AS FLOAT)) AS DATETIME = '" + Format(dtproxcontato, "MM/dd/yyyy") & "'"

  RESUMINDO:  quero
   
no Access como isto deveria RODAR???
     
agradeço a ajuda.

Fernando Reis

Fernando Reis

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

02/07/2009

Sinceramente não entendi sua query, vou me informar no MSDN.

Fabio
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Ola Fabio, Deixa tentar explicar o problema para que possa entender,     tenho uma table de Historico de chamados     TABELA  tbl_historico   CAMPO                          TI CODIGO_HIST               numerico DATA_HIST                    DATETIME HISTORICO_HIST          TEXTO PROXCONTATO_HIST     DATETIME         COMO PODE VER É UMA TABELA BEM SIMPLES  QUE FOI CRIADO NO access ( POR UMA NECESSIDADE PRÓPRIA)   ANTES DISTO ESTAVA USANDO O SQL E A QUERY ABAIXO ME TRAZIA UM DATASET DE TODAS OS REGISTROS DE ACORDO COM A DATA PROXCONTATO_HIST     OU SEJA     HOJE  DIA 02/07/09  eu quero saber quais são minhas agendas     ACREDITO QUE A QUERY MAIS SIMPLES É  'select * from tbl_historico where proxcontato_hist = #07/02/2009#.     mas em access não ta rolando .   oque posso fazer,     acredito que tem problema com a questão de data e hora..             espero ter sido mais claro     abraços
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Tente converter.

Convert.ToDateTime(txtData.Text).ToString();    assim fic ano formato de como vc digitou
Convert.ToDateTime(txtData.Text).ToShortDateString();     assim fica no formato dd/MM/yyyy
Convert.ToDateTime(txtData.Text).ToShortTimeString();    assim fica hora no formato HH:mm



Fernando por que não utilza parâmetros no seu método de consulta?

parametros[0] = new OleDbParameter("@data",OleDbType.Date);
parametros[0].Value = Convert.ToDateTime(dataExcluirCet);
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Ola Fabio,     o Problema não esta no formato de Data e sim na lógica da Consulta,   ou seja:       ProxContato_hist 02/07/2009 00:00:00 02/07/2009 13:00:00     vamor supor que tenho dois registros com mestes dados,   quando peço para selecionar todos os campos em que o campo proxcontato_hist seja igual a 02/07/2009  ele parece nâo entender,     se coloco por exemplo   SELECT * FROM TBL_HISTORICO WHERE BETWEEN #02/07/2009# E #02/07/2009#   O oledb OU aCCESS NÃO ENTENDE QUE É A NO PERÍDO DE 24 HORAS OU,   TODOS QUE TENHAM A MESMA DATA     Public Function SelectHistoricoForGridAgenda(ByVal dtProxContato As Date) As DataSet         Dim clsBanco As New clsBanco
        Dim strsql As String
        strsql = "SELECT "
        strsql = strsql & " H.CODIGO_HIST "
        strsql = strsql & ",H.DATA_HIST "
        strsql = strsql & ",E.NOME_EMP"
        strsql = strsql & ",H.HISTORICO_HIST"
        strsql = strsql & ",(SELECT C.NOME_CONT FROM TBL_CONTATO AS C WHERE C.CODIGO_CONT = H.CODIGO_CONT) AS CONTATO"
        strsql = strsql & ",H.CODIGO_PROJ"
        strsql = strsql & " FROM (TBL_HISTORICO AS H INNER JOIN TBL_PROJETO AS P "
        strsql = strsql & " ON H.CODIGO_PROJ = P.CODIGO_PROJ)"
        strsql = strsql & " INNER JOIN TBL_EMPRESA AS E ON E.CODIGO_EMP = P.CODIGO_EMP"
' primeira tentativa         strsql = strsql & " WHERE (((H.PROXCONTATO_HIST) BETWEEN #" & dtProxContato & "# AND #" & dtProxContato & "#));"     ´segunda tentativa             'strsql = strsql & " WHERE H.PROXCONTATO_HIST = '" & Format(dtProxContato, "MM/dd/yyyy") & "'"   ´terceira tentativa           ''strsql = strsql & " WHERE CAST(FLOOR(CAST(PROXCONTATO_HIST AS FLOAT)) AS DATETIME) = '" & Format(dtProxContato, "MM/dd/yyyy") & "'"         Return clsBanco.RetornaDataSet(strsql.ToString)     End Function
   
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Estou instalando o Access para fazer a Query
Mas deixa eu ainda não entendi o que você quer fazer, quer selecionar as datas de um determinado dia é isso?

GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

A principio sim
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Veja se a dúvida que tive um tempo atrás é a mesma sua.
Sei que para você é com Access, mas veja se ajuda.

Fabio

===========================================================

Realmente não vai trazer nada !! Trabalhar com data no SQL Server 2000
requer alguns truques principalmente quando usamos campo datetime.

Como vc já deve ter notado, o campo do tipo datetime armazena a data com uma
precisão de milésimo de segundo. Sendo assim, quando vc faz uma comparação
com = ele busca uma data que seja igual incluindo os milésimo de segundo.

No seu exemplo temos campo= getdate() que no momento é "2006-04-07
18:25:23.153". Acredito que muito dificilment ev cterá uma entrada como essa,
a não ser que seja inserido um registros exatamente no milésimo de segundo
.153.

Bom, uma maneira simples de resolver isso (imaginando que vc queira pegar
todos os recados do dia) seria utilizando o >= e <= como no exemplo

WHERE campo >= CONVERT(VARCHAR(08),getdate(),103) --
AND campo <= getdate()

Nesse caso ele ira pegar todos os registros >= que a data de hoje
(desconsiderando o horário) e <= que '2006-04-07 18:25:23.153'

Bom, se quiser entender melhor como trabalhar com data no SQL Server, dê uma
olhada no link abaixo.

http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&sid=34

FOI ÚTIL PRA VOCÊ? Ajude outras pessoas, marque-a como útil.

abraços
Nilton Pinheiro
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Fabio,   Funcionou a |Principio,   mas achei minha solução um tanto........"gambiarra" ainda,   Vou tentar melhorar,   se tiver alguma outra solução mais concreta eu agradeceria,     mas por enquanto duvida esclarecida,   Grato  
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Por que gambiarra? posta como você fez.
GOSTEI 0
Devmedia

Devmedia

02/07/2009

Fernando,
o consultor está esperando sua reposta para poder melhor te ajudar, ok.
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Olá Fabio,     Neste Caso eu fiz uma select que acredito ser simples e diz o Seguinte     SELECT * FROM TBL_HISTORICO WHERE  DTPROXCONTATO_HIST BETWEEN #" & DTPROXCONTATO& "# AND #" & DTPROXCONTATO & " 23:59:00"     QUANDO DISSE "GAMBIARRA", QUIS DIZER QUE A MINHA SOLUÇÃO ESTA DESTA FORMA.......UMA GAMBIARRA...     OQUE POSSO FAZER PARA MELHORAR???   agradeço a ajuda,    
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Fernando para falar a verde eu fiz um sistema só com Access, acredito que tem várias outras alternativas de banco.

Mas não é possível utilizar a função Convert no Access?

WHERE DATA >= CONVERT(VARCHAR(08),getdate(),103) AND DATA <= getdate()


[]´s
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Ja tentei esta opção tambpém,   mas não funciona o Convert pois é somente para o SQL ( até onde eu entendi),   alguma outra dica?  
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Com access infelizmente não, posso saber por que Access?

Fabio
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

A Empresa não Possue e não tenho acesso para instalar um SQL Server, mesmo o Express 2005
GOSTEI 0
Fabio Mans

Fabio Mans

02/07/2009

Posso encerrar o chamado?
GOSTEI 0
Fernando Reis

Fernando Reis

02/07/2009

Sim,

Vou tentar outra solução,

Obrigado
GOSTEI 0
POSTAR