none
É errado fazer varias consultas em um banco de dados access pois a consulta não retorna o que eu quero RRS feed

  • Pergunta

  • É errado a rotina que estou tentando implementar?

    pois de maneira nenhuma retorna o que eu estou querendo.

    for (int i = 1; i <= variavel; i++)
                    {
                        int cont = 0;
                        DateTime dataposterior = DateTime.Today, dataanterior = DateTime.Today;
                        dataanterior = dataanterior.AddMonths(-i);
                        dataposterior = dataposterior.AddMonths(-(i - 1));
                        con.Open();
                        cmd = new OleDbCommand("SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = " + idProduto + ")", con);
                        dr = cmd.ExecuteReader();
                        if (dr.HasRows)
                        { 
                            while (dr.Read())
                            {
                                Demanda = Demanda + Convert.ToInt32(dr["qtdHistSaida"]);
                                cont = 1;
                            }
                        }
                        dr.Close();
                        con.Close();
                        Valordivisao = Valordivisao + cont;
                    }


    sexta-feira, 6 de setembro de 2013 05:24

Respostas

  • Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.

    for (int i = 0; i <= MesesDemanda; i++)
                    {
                        int cont = 0;
                        DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now;
                        con.Open();
                        cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE "
                        + "((HistSaida.dataHistSaida >=?  AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con);
                        cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
                        cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i)));
                        cmd.Parameters.AddWithValue("@p3", idProduto);
                        var result = cmd.ExecuteScalar();
                        if (result != System.DBNull.Value)
                        {
                            Demanda = Demanda + Convert.ToUInt32(result);
                            cont = 1;
                        }
                        dr.Close();
                        con.Close(); 
                        Valordivisao = Valordivisao + cont;
                    }

    terça-feira, 10 de setembro de 2013 07:24
  • Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.

    for (int i = 0; i <= MesesDemanda; i++)
                    {
                        int cont = 0;
                        DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now;
                        con.Open();
                        cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE "
                        + "((HistSaida.dataHistSaida >=?  AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con);
                        cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
                        cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i)));
                        cmd.Parameters.AddWithValue("@p3", idProduto);
                        var result = cmd.ExecuteScalar();
                        if (result != System.DBNull.Value)
                        {
                            Demanda = Demanda + Convert.ToUInt32(result);
                            cont = 1;
                        }
                        dr.Close();
                        con.Close(); 
                        Valordivisao = Valordivisao + cont;
                    }

    cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));

    não precisa colocar Convert porque ele recebe objeto! mas, se você fez assim ta certo

    a outra forma é Add("@P1", OleDbType.Date).value = dataanterior.AddMonths(-(i + 1))

    Mas, se ta rolando do jeito que você falo confirma esse post como reposta e sempre faça assim!

    Fúlvio Cezar Canducci Dias


    terça-feira, 10 de setembro de 2013 13:18

Todas as Respostas

  • Você tem registros na tabela ?

    Monitora o SQL Server com o Profiler e vê a query que está chegando...


    Leonardo Lourenço Silva


    sexta-feira, 6 de setembro de 2013 12:11
  • Tenho registros sim, mais como faço para monitorar SQL server? estou usando access...
    sexta-feira, 6 de setembro de 2013 22:55
  • Vou te dar uma dica que eu vejo todo mundo fazendo errado e não sei o porque disso!

    Quando trabalhamos com desenvolvimento e acessamos tabelas de qualquer banco utiliza-se a classe por completo e todos seus recursos

    Veja!

    Coloque o cmd.Paramenters.Add(, porque ele faz o converte necessário para suas variáveis dinâmicas da sua SQL não passe direto porque é isso que faz ele não trazer o resultado correto!

    using ( OleDbConnection conn = new OleDbConnection( cstr ) )
        {
          conn.Open();
    
          string selstr = "select firstName from Employee where lastname = ?";
          OleDbCommand cmd = new OleDbCommand( selstr, conn );
          OleDbParameter name = cmd.Parameters.Add( "@name", OleDbType.VarChar, 15 );
          name.Value = "Tang";
          OleDbDataReader rdr = cmd.ExecuteReader();
    
          if ( rdr.Read() )
          {
            Console.WriteLine(rdr.GetString( 0 ) );
          }
          else
          {
            Console.WriteLine(" is not available yet" );
          }
        }

    O Exemplo logo acima tem inclusive o tipo VarChar mas, ali se pode colocar o tipo DateTime, Date e por ai !

    Essa acho eu que trará seu dados certinho!


    Fúlvio Cezar Canducci Dias

    sábado, 7 de setembro de 2013 13:52
  • Desculpa... não estou entendendo direito. Como eu faria então a consulta?

     
    SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM 
    HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = "idProduto";

     

     

     

    segunda-feira, 9 de setembro de 2013 23:28
  • Desculpa... não estou entendendo direito. Como eu faria então a consulta?

     
    SELECT HistSaida.dataHistSaida, HistSaida.idProdutoHistSaida, HistSaida.qtdHistSaida FROM 
    HistSaida WHERE (((HistSaida.dataHistSaida) BETWEEN #" + dataanterior + "# AND #" + dataposterior + "#) AND idProdutoHistSaida = "idProduto";

     

     

     

    Leia?

    http://msdn.microsoft.com/pt-br/library/system.data.oledb.oledbcommand.parameters(v=vs.90).aspx


    Fúlvio Cezar Canducci Dias

    segunda-feira, 9 de setembro de 2013 23:31
  • Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.

    for (int i = 0; i <= MesesDemanda; i++)
                    {
                        int cont = 0;
                        DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now;
                        con.Open();
                        cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE "
                        + "((HistSaida.dataHistSaida >=?  AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con);
                        cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
                        cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i)));
                        cmd.Parameters.AddWithValue("@p3", idProduto);
                        var result = cmd.ExecuteScalar();
                        if (result != System.DBNull.Value)
                        {
                            Demanda = Demanda + Convert.ToUInt32(result);
                            cont = 1;
                        }
                        dr.Close();
                        con.Close(); 
                        Valordivisao = Valordivisao + cont;
                    }

    terça-feira, 10 de setembro de 2013 07:24
  • Obrigado pelo ajuda fiz desse jeito não sei se é o mais correto mais está funcionando.

    for (int i = 0; i <= MesesDemanda; i++)
                    {
                        int cont = 0;
                        DateTime dataposterior = DateTime.Now, dataanterior = DateTime.Now;
                        con.Open();
                        cmd = new OleDbCommand("SELECT SUM(qtdHistSaida) FROM HistSaida WHERE "
                        + "((HistSaida.dataHistSaida >=?  AND HistSaida.dataHistSaida <= ?) AND idProdutoHistSaida = ?)", con);
                        cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));
                        cmd.Parameters.AddWithValue("@p2", Convert.ToString(dataposterior.AddMonths(-i)));
                        cmd.Parameters.AddWithValue("@p3", idProduto);
                        var result = cmd.ExecuteScalar();
                        if (result != System.DBNull.Value)
                        {
                            Demanda = Demanda + Convert.ToUInt32(result);
                            cont = 1;
                        }
                        dr.Close();
                        con.Close(); 
                        Valordivisao = Valordivisao + cont;
                    }

    cmd.Parameters.AddWithValue("@p1", Convert.ToString(dataanterior.AddMonths(-(i + 1))));

    não precisa colocar Convert porque ele recebe objeto! mas, se você fez assim ta certo

    a outra forma é Add("@P1", OleDbType.Date).value = dataanterior.AddMonths(-(i + 1))

    Mas, se ta rolando do jeito que você falo confirma esse post como reposta e sempre faça assim!

    Fúlvio Cezar Canducci Dias


    terça-feira, 10 de setembro de 2013 13:18