TRABALHANDO COM DATAS
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.
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
Curtidas 0
Respostas
Fabio Mans
02/07/2009
Sinceramente não entendi sua query, vou me informar no MSDN.
Fabio
Fabio
GOSTEI 0
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
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);
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
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
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
02/07/2009
veja a tabela TBL_HITORICO
https://www.devmedia.com.br/imagens/discovirtual/175404/SSM/SSM-2.zip
GOSTEI 0
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?
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
02/07/2009
A principio sim
GOSTEI 0
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
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
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
02/07/2009
Por que gambiarra? posta como você fez.
GOSTEI 0
Devmedia
02/07/2009
Fernando,
o consultor está esperando sua reposta para poder melhor te ajudar, ok.
o consultor está esperando sua reposta para poder melhor te ajudar, ok.
GOSTEI 0
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
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
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
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
02/07/2009
Com access infelizmente não, posso saber por que Access?
Fabio
Fabio
GOSTEI 0
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
02/07/2009
Posso encerrar o chamado?
GOSTEI 0
Fernando Reis
02/07/2009
Sim,
Vou tentar outra solução,
Obrigado
Vou tentar outra solução,
Obrigado
GOSTEI 0