none
Erro no formato da data no retorno de uma consulta no Access RRS feed

  • Pergunta

  • Boa Tarde,

    Estou com um problema muito estranho:

    Possuo um banco Access com campo Data/Hora e ao fazer uma consulta:

    OleDbCommand da = new OleDbCommand("select MIN(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp > #" + dataInicial + " 00:00:00# and E3TimeStamp < #" + dataInicial + " 23:59:59#", con);

    A cosnulta funciona perfeitamente, mas se consulto #01/02/2015 xx/xx/xxxx# ele me retorna 02/01/2015. e essa inversão só acontece até 12/01/2015. Após 13/01/2015 tudo funciona normal. O mesmo ocorre para todos os meses.

    A função comleta é essa abaixo:

    public DateTime verifDataInicial(string dataInicial)
            {
                OleDbCommand da = new OleDbCommand("select MIN(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp > #" + dataInicial + " 00:00:00# and E3TimeStamp < #" + dataInicial + " 23:59:59#", con);
    
                con.Open();
                DateTime MaiorE3;
                string teste;
    
                try
                {
                    teste = ((DateTime)da.ExecuteScalar()).ToString("MM/dd/yyyy");
                    return Convert.ToDateTime(teste);
                }
                catch
                {
                    string data_vazia = "03/01/1968";
                    //MaiorE3 = Convert.ToDateTime(data_vazia);
                    return Convert.ToDateTime(data_vazia);
                }
                finally
                {
                    con.Close();
                }
            }

    Alguem poderia desvenadr esse mistério?

    Obrigado

    sexta-feira, 27 de março de 2015 19:56

Respostas

Todas as Respostas

  • Beto, boa noite!

    Não entendi sua divida, em um determinado tempo sua consulta não funciona correto? este período esta retornando um timestamp null?



    Att,
    André Rodrigues Côrte
    Analista de Sistema
    Côrte Solutions
    Grupo de Estudo C# Facebook
    Canal de Estudo Youtube

    sábado, 28 de março de 2015 07:09
  • Realmente acho que está meio mal explicado. Vamos lá:

    Possuo um BD Access que tem uma tabela que possui uma coluna tipo Data/Hora no formato dd/MM/yyyy HH:mm.ss. Quando executo uma consulta com o código abaixo, acontece algumas situações estranhas. Repare que o método retorna um DateTime e como o que vale é a string SQL, uso a entrada do método em string mesmo, ok?

    public DateTime verifDataFinal(string dataInicial)
            {
                OleDbCommand da = new OleDbCommand("select MAX(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp < #" + dataInicial + " 23:59:59# AND E3TimeStamp > #" + dataInicial + " 00:00:00#", con);
                con.Open();
                DateTime MaiorE3;
                try
                {
                    MaiorE3 = (DateTime)da.ExecuteScalar();
                    return MaiorE3;
                }
                catch
                {
                    string data_vazia = "03/01/1968";
                    MaiorE3 = Convert.ToDateTime(data_vazia);
                    return MaiorE3;
                }
                finally
                {
                    con.Close();
                }
            }

    Acontece os seguintes "fenômenos"(rsrsr):

    1. Se eu entrar com 01/01/2015, ele retorna normal;
    2. Se eu entrar com 02/01/2015, ele retorna 01/02/2015:
    3. Se eu entrar com datas entre 03/01/2015 e 12/01/2015 ele retorna null apesar de existir resultado no banco para retorno.

    O mesmo tipo de problemas acontece para meses 02 e 03.

    Me salvaê! rsrs

    Obrigado

    domingo, 29 de março de 2015 21:13
  • Ola BetoPestana

    tenta mudar somente aqui:

    "#" + string.Format("{0:dd/MM/yyyy}", dataInicial // aqui continua o seu codigo  

    segunda-feira, 30 de março de 2015 00:35
  • Então Marcos, aconteceu o seguinte,

    Olhando com mais calma e verificando os registros retornados, mesmo com sua sugestão as consultas estão sendo feitas de fato nos registros existentes porém fazendo a consulta com a data ainda invertida entre dd e MM.

    E, as configurações locais, dá máquina e tb do Access estão dd/MM/yyyy.

    Alguma ideia?

    Obrigado

    • Editado BetoPestana segunda-feira, 30 de março de 2015 01:28
    segunda-feira, 30 de março de 2015 01:10
  • o que estou sugerindo é você mudar o formato no ato do select.

    uso isto com freqüência e funciona.

    segunda-feira, 30 de março de 2015 01:25
  • Percebi tb que seuqer adianta inverter na string da consulta, pois o resultado vem como se a consulta fosse feita invertida entre dd e MM.

    Caramba!

    Socorro!

    segunda-feira, 30 de março de 2015 01:32
  • Beto,

    Certifique que o retorno não esta retornando nenhuma data null, pois isso pode ocorrer erro!


    Att,
    André Rodrigues Côrte
    Analista de Sistema
    Côrte Solutions
    Grupo de Estudo C# Facebook
    Canal de Estudo Youtube

    segunda-feira, 30 de março de 2015 02:06
  • Então,

    Marcos - Fiz a sua sugestão justamente no ato do SELECT. e a consulta com #02/01/2015#, retorna o registro que possui o filtro 01/02/2015.

    André - Só retorna null quando filtro #02/01/2015# e não existe egistro em 01/02/2015.

    Estou pirando!

    Help me

    Thanks

    segunda-feira, 30 de março de 2015 03:14
  • Por que não pega o retorno com OleDbDataReader?

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 31 de março de 2015 11:50
  • Resolveste?

    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 1 de abril de 2015 20:08
    Moderador
  • Boa noite Beto,

    Alguma atualização para nos dar ?

    Referente ao que o GMSOFT falou não seria a solução ?

    ou trabalhar direto com uma mascara reversa de data ?

    Abraços


    Matheus Leopardi Mello Canelada Campos

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    TechNet Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 2 de abril de 2015 02:56
  • Bom dia Beto,

    Conseguiu resolver seu problema? Se sim, nos envie detalhes do que fez para resolver. Caso ainda esteja com problemas, desmarque a resposta e responda aos questionamentos feitos com mais detalhes para que possamos continuar ajudando.

    Obrigado,

    Abraço!


    Eduardo Romero

    Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.

    sexta-feira, 3 de abril de 2015 10:28
    Moderador