none
Update no Access 2007 VS2008 não atualiza os campos RRS feed

  • Pergunta

  • Tenho uma aplicação da qual tive que, infelizmente migrar para o Access, e estou tendo um problema ao executar um update, por isso peço ajuda a quem puder.

    A aplicação esta no VS2008, windows forms e o banco e o Access 2007.

    Tenho uma classe q possui um metodo de update a seguir:

          bool blnRetorno = false;
          string strSql = "UPDATE ocupacoes SET ocupacoes.ocupacao=@ocupacao, " +
                  " ocupacoes.tipo=@tipo, ocupacoes.tempo=@tempo " +
                  " WHERE idocupacoes=@idocupacoes";
    
          List<OleDbParameter> objParams = new List<OleDbParameter>();
          objParams.Add(new OleDbParameter("@idocupacoes", p_objOcupacoes.idocupacoes));
          objParams.Add(new OleDbParameter("@ocupacao", p_objOcupacoes.ocupacao));
          objParams.Add(new OleDbParameter("@tipo", p_objOcupacoes.tipo));
          objParams.Add(new OleDbParameter("@tempo", p_objOcupacoes.tempo));
    
          blnRetorno = objConn.executarComando(strSql, objParams);
    
          return blnRetorno;
    
    

    o qual executa um metodo de uma outra classe de acesso ao banco, a seguir o metodo:

        public bool executarComando(string p_strSql, List<OleDbParameter> p_objParams)
        {
          bool blnResult = false;
    
          if (!this.conectar())
          {
            return false;
          }
          //SqlCommand objCmd = new SqlCommand(p_strSql, objConn);
          OleDbCommand objCmd = new OleDbCommand(p_strSql, objConn);
    
          //foreach (OleDbParameter param in p_objParams)
          foreach (OleDbParameter param in p_objParams)
          {
            objCmd.Parameters.Add(param);
          }
    
          try
          { <br/>
    blnResult = (objCmd.ExecuteNonQuery() > 0 ? true : false);
          }
          catch (Exception ex)
          {
            throw new Exception("" + ex);
            return false;
          }
    
          this.desconectar();
    
          return blnResult;
        }
    
    

    O problema é que ao executar tal codigo não é encontrado nenhum erro no comando ExcecuteNonQuery(), mas ele também não faz o update dos campos.

    Alguém me ajuda?
    Obrigado!!!

    quarta-feira, 13 de outubro de 2010 04:09

Respostas

  • Andre você como sempre muito prestativo, sempre disposto a ajudar, mas dessa vez eu consegui achar a solução sozinho, depois de fritar um pouco o tico e o teco. A sua solução esta correta, mas não pelo fato da forma da nomeação do parametro e sim na verdade o ocorre com o update no access e que ele não trabalha com parametro nomeado, assim como no SLQServer que basta apenas você nomear ele e colocar na sequência que quiser que o SQLServer trata isso pra você, no access a sequência de parametros deve ser igual a sequencia que ele se seguem na instrução update senão ele não interpreta de forma correta.

    De toda forma obrigado pela ajuda!

    • Marcado como Resposta FoxWilliamMulder segunda-feira, 18 de outubro de 2010 19:08
    segunda-feira, 18 de outubro de 2010 19:08

Todas as Respostas

  • Prezado,

    Acredito que seja porque os parâmetros em OleDb são definidos de uma forma diferente... Na sua query, ao invés de indicá-los com @nome, você deve indicar com ? (ponto de interrogação)... Além disso, deve incluí-los na ordem correta da query:

       bool blnRetorno = false;
       string strSql = "UPDATE ocupacoes SET ocupacoes.ocupacao=?, " +
           " ocupacoes.tipo=?, ocupacoes.tempo=? " +
           " WHERE idocupacoes=?";
    
       List<OleDbParameter> objParams = new List<OleDbParameter>();
       objParams.Add(new OleDbParameter("ocupacao", p_objOcupacoes.ocupacao));
       objParams.Add(new OleDbParameter("tipo", p_objOcupacoes.tipo));
       objParams.Add(new OleDbParameter("tempo", p_objOcupacoes.tempo));
       objParams.Add(new OleDbParameter("idocupacoes", p_objOcupacoes.idocupacoes));
    
       blnRetorno = objConn.executarComando(strSql, objParams);
    
       return blnRetorno;
    
    

    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 13 de outubro de 2010 09:20
    Moderador
  • Andre você como sempre muito prestativo, sempre disposto a ajudar, mas dessa vez eu consegui achar a solução sozinho, depois de fritar um pouco o tico e o teco. A sua solução esta correta, mas não pelo fato da forma da nomeação do parametro e sim na verdade o ocorre com o update no access e que ele não trabalha com parametro nomeado, assim como no SLQServer que basta apenas você nomear ele e colocar na sequência que quiser que o SQLServer trata isso pra você, no access a sequência de parametros deve ser igual a sequencia que ele se seguem na instrução update senão ele não interpreta de forma correta.

    De toda forma obrigado pela ajuda!

    • Marcado como Resposta FoxWilliamMulder segunda-feira, 18 de outubro de 2010 19:08
    segunda-feira, 18 de outubro de 2010 19:08
  • Prezado,

    Magina... Precisando é só falar...

    Bons estudos / trabalho por aí...


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 18 de outubro de 2010 19:09
    Moderador