none
Nenhum valor foi fornecido para um ou mais parâmetros necessários RRS feed

  • Pergunta

  • Preciso apagar registros em tabela do Access selecionado à partir de um DataGridView, usando o ID. No entanto surge o erro "Nenhum valor foi fornecido para um ou mais parâmetros necessários".  Veja o código:

                string stringConexao = mtds.caminhoBD();
                OleDbConnection conexao = new OleDbConnection(stringConexao);
                conexao.Open();
                OleDbCommand cmd = new OleDbCommand();
                cmdd.Connection = conexao;

                string itemID = this.dgvPedido.CurrentRow.Index.ToString();
               
                cmd.CommandText = "delete from Temp_vendas where id='"+ itemID +"'";           
               
                cmdd.ExecuteNonQuery();
                conexao.Close();

    Estou empacado nesse código há horas! Peço a ajuda de todos, pois faz parte de um projeto da faculdade e preciso entregar logo. Obrigado.


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 00:31

Respostas

  • Voce de estar a fazer algo de errado:

    faz assim:

      private void btnRemover_Click(object sender, EventArgs e)
            {         
                string stringConexao = mtds.caminhoBD();
                OleDbConnection conexao = new OleDbConnection(stringConexao);
                conexao.Open();
                OleDbCommand cmd = new OleDbCommand();

                string itemID = this.dgvPedido.CurrentRow.Index.ToString();
     
                cmd.CommandText = "delete codigo, codISBN, titulo, autor, qtde from Temp_vendas where id = ? ";                                                     cmd.Parameters.AddWithValue("?", itemID);

                MessageBox.Show(itemID.ToString()); 
                cmd.Connection = conexao; 
                
                cmd.ExecuteNonQuery();
                conexao.Close();
               atualizaDataGridView();
            }

     


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 19:48
    Moderador
  • Bom dia.

    Estava analisando seu código e vamos la:

    1 - Verifique sua instrucao sql para o comando remover item:

    cmdd.CommandText = "delete from Temp_vendas where id = @id ";
    cmdd.Parameters.AddWithValue("@id", itemID);


    A estrutura da tua tabela Temp_vendas nao existe o campo id.

    Resolucao: Como voce esta tentando apagar o registro do livro sua instrucao deve ficar assim:

    cmdd.CommandText = "delete from Temp_vendas where codISBN= @codISBN";
    cmdd.Parameters.AddWithValue("@id", itemID);

    2 - Na passagem do parametro, nesta linha:

    string itemID = this.dgvPedido.CurrentRow.Index.ToString();


    o itemID, nao armazena nenhum valor.

    Resolucao:

    Carregar os valores da grid em campos textbox na tela de vendas, ou pegar o valor correto na grid e passar como parametro para o comando acima.

    3 - Aqui uma breve ajuda

    Como voce esta trabalhando com diversar transacoes, pode ser que ocorra o seguinte: Voce pode efeturar a venda e nao conseguir dar baixa no estoque, por N motivos.

    Aconselho voce a enviar todos os comandos numa mesma transacao, dai voce garante a consistencia do seus dados, isso pode ser implementado depois de tudo estar funcionando, ok.

    Segue link:

    http://msdn.microsoft.com/pt-br/library/2k2hy99x%28v=vs.80%29.aspx


    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    segunda-feira, 14 de novembro de 2011 11:19

Todas as Respostas

  • Boa noite..

    Tem como voce mandar seu projeto junto com o banco de dados..acabei de chegar em casa..dai te ajudo!

    Ok.


    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    sábado, 12 de novembro de 2011 00:43
  • Ok, vou te mandar.
    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 00:51
  • Enviado!
    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 00:58
  • Boa noite.

    Nao chegou nada aqui nao, voce enviou em qual e-mail?


    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    sábado, 12 de novembro de 2011 01:35
  • edsonjunior.sjc@gmail.com

     

    Percebi que voltaram todos os e-mails que te mandei.


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 16:52
  • Manda um e-mail pra jvirtuarts@hotmail.com que eu respondo com o projeto compactado.
    Insistir sempre, desistir jamais!
    • Editado JuniorCS sábado, 12 de novembro de 2011 18:04
    sábado, 12 de novembro de 2011 18:04
  • Esse erro e comum quando se tenta pegar o valor apartir do datagridview. Tens de testar, faz assim:

     private void button2_Click(object sender, EventArgs e)

            {

                if (this.dataGridView1.SelectedRows.Count > 0)

                {

                    textboxnome.text = int.Parse(this.dataGridView1.SelectedRows[0].Cells[1].Value.);

                    textboxsobrenome.text = (string)(this.dataGridView1.SelectedRows[0].Cells[2].Value.ToString());

     

                }

            }


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 18:08
    Moderador
  • O incrível é que eu depurei essa parte do código e a variável ID está retornando corretamente a posição do reg. selecionado no DataGridView. E a instrução SQL volta  "delete from Temp_vendas where id = '0' ", dependendo do ID.

    Estou perdendo horas de sono nisso... Veja o código atual:

            private void btnRemover_Click(object sender, EventArgs e)
            {        
                string stringConexao = mtds.caminhoBD();
                OleDbConnection conexao = new OleDbConnection(stringConexao);
                conexao.Open();
                OleDbCommand cmd = new OleDbCommand();

                string itemID = this.dgvPedido.CurrentRow.Index.ToString();
     
                cmd.CommandText = "delete from Temp_vendas where id = '" + itemID + "' "; 
                cmd.Connection = conexao;
               
                cmd.ExecuteNonQuery();
                conexao.Close();
               atualizaDataGridView();
            }

     


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 18:42
  • usa parametros:

    string itemID = this.dgvPedido.CurrentRow.Index.ToString();
     
                cmd.CommandText = "delete from Temp_vendas where id =@Id;

                cmd.Parameters.AddWithValue("@id", itemID);

                aqui tenta usar uma msn:   MessageBox.Show(itemID().ToString()); pra ver se esta tudo correcto.

                cmd.Connection = conexao; 

                 cmd.ExecuteNonQuery();

                conexao.Close();
               atualizaDataGridView();

     


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 18:53
    Moderador
  • Fiz do jeito que vc sugeriu, apareceu o num. do ID no messagebox corretamente, mas ao invés de apagar o reg. selecionado, apagou todos!

            private void btnRemover_Click(object sender, EventArgs e)
            {        
                string stringConexao = mtds.caminhoBD();
                OleDbConnection conexao = new OleDbConnection(stringConexao);
                conexao.Open();
                OleDbCommand cmd = new OleDbCommand();

                string itemID = this.dgvPedido.CurrentRow.Index.ToString();
     
                cmd.CommandText = "delete from Temp_vendas where id = @id ";      
                cmd.Parameters.AddWithValue("@id", itemID);
                MessageBox.Show(itemID.ToString());
                cmd.Connection = conexao;
               
                cmd.ExecuteNonQuery();
                conexao.Close();
               atualizaDataGridView();
            }


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 19:03
  • Sim apaga toda linha onde este registo estiver. Nao apaga toda base de dados. Voce nao pode apagar apenas o numero do registo, se voce quer apagar apenas um campo vais ter de fazer assim:

    delete nome from tabela where id =ID

    ai apaga apenas o nome, mais nao e boa pratica o que tens de fazer e update e nao apagar. nao e bom apagar apenas um registo, mais sim update.

     

     


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 19:13
    Moderador
  • eu testei este codigo e funciona perfeitamente, :

    public void Apagar_Registo(Class_Person _person)

             {

                 OleDbCommand Cnn_Command = new OleDbCommand();

                 OleDbDataAdapter adapter = new OleDbDataAdapter();

     

                 try

                 {

                     Cnn_Command.Connection = Open_Cnn();

                     Cnn_Command.CommandText = "Delete From Table_Informacao Where ID =@ID";

                     Cnn_Command.CreateParameter();

                     Cnn_Command.Parameters.AddRange(Apagar(_person));

                     Cnn_Command.CommandType = CommandType.Text;

                     adapter.InsertCommand = Cnn_Command;

                     Cnn_Command.ExecuteNonQuery();

                 }

     

                 catch (OleDbException e)

                 {

                     MessageBox.Show(e.GetBaseException().ToString());

                 }

                 finally { Close_Cnn(); };

             }

           private OleDbParameter[] Apagar(Class_Person p)

             {

                 Criar_Par = new OleDbParameter[1];

                 Criar_Par[0] = new OleDbParameter("?", OleDbType.Char);

                 Criar_Par[0].Value = p.ID;

                 return Criar_Par;

             }

    private void button3_Click(object sender, EventArgs e)

            {

                Class_Person p = new Class_Person();

                p.ID = int.Parse(textBox1.Text);

     

                Class_Conecao testar = new Class_Conecao();

                testar.Apagar_Registo(p);

            }


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 19:22
    Moderador
  • Malange eu só quero apagar o registro selecionado. O 'nome' na instrução SQL é o nome de um campo da linha? No meu caso, a tabela Temp_vendas tem os campos codigo, codISBN, titulo, autor, qtde...

     


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 19:26
  • Voce de estar a fazer algo de errado:

    faz assim:

      private void btnRemover_Click(object sender, EventArgs e)
            {         
                string stringConexao = mtds.caminhoBD();
                OleDbConnection conexao = new OleDbConnection(stringConexao);
                conexao.Open();
                OleDbCommand cmd = new OleDbCommand();

                string itemID = this.dgvPedido.CurrentRow.Index.ToString();
     
                cmd.CommandText = "delete codigo, codISBN, titulo, autor, qtde from Temp_vendas where id = ? ";                                                     cmd.Parameters.AddWithValue("?", itemID);

                MessageBox.Show(itemID.ToString()); 
                cmd.Connection = conexao; 
                
                cmd.ExecuteNonQuery();
                conexao.Close();
               atualizaDataGridView();
            }

     


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 12 de novembro de 2011 19:48
    Moderador
  • Fiz do igual ao post de cima, mas o compilador gerou o erro:

    "Nenhum valor foi fornecido para um ou mais parâmetros necessários.".

    Cara, já tô ficando maluco com isso...


    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 20:04
  • Manda neste email

    edson_junior_sjc@hotmail.com


    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    sábado, 12 de novembro de 2011 20:11
  • Júnior, dê uma olhada na sua caixa de e-mail, por favor.
    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 20:16
  • Ja esta aberto aqui..quem vc esta tentando excluir? Qual tela?
    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    sábado, 12 de novembro de 2011 20:29
  • Quero excluir, na parte de Vendas, os registros incluidos no DataGridView. Lá ficam os livros comprados e automaticamente são gravados numa tabela temporária 'Temp_vendas'. Quando seleciono um registro no DataGridView, quero que esse registro seja apagado da tabela, somente o registro selecionado, ao clicar no botão 'excluir'.
    Insistir sempre, desistir jamais!
    sábado, 12 de novembro de 2011 20:33
  • Bom dia.

    Estava analisando seu código e vamos la:

    1 - Verifique sua instrucao sql para o comando remover item:

    cmdd.CommandText = "delete from Temp_vendas where id = @id ";
    cmdd.Parameters.AddWithValue("@id", itemID);


    A estrutura da tua tabela Temp_vendas nao existe o campo id.

    Resolucao: Como voce esta tentando apagar o registro do livro sua instrucao deve ficar assim:

    cmdd.CommandText = "delete from Temp_vendas where codISBN= @codISBN";
    cmdd.Parameters.AddWithValue("@id", itemID);

    2 - Na passagem do parametro, nesta linha:

    string itemID = this.dgvPedido.CurrentRow.Index.ToString();


    o itemID, nao armazena nenhum valor.

    Resolucao:

    Carregar os valores da grid em campos textbox na tela de vendas, ou pegar o valor correto na grid e passar como parametro para o comando acima.

    3 - Aqui uma breve ajuda

    Como voce esta trabalhando com diversar transacoes, pode ser que ocorra o seguinte: Voce pode efeturar a venda e nao conseguir dar baixa no estoque, por N motivos.

    Aconselho voce a enviar todos os comandos numa mesma transacao, dai voce garante a consistencia do seus dados, isso pode ser implementado depois de tudo estar funcionando, ok.

    Segue link:

    http://msdn.microsoft.com/pt-br/library/2k2hy99x%28v=vs.80%29.aspx


    Qualquer dúvida ou problema estou a disposição Edson Junior e-mail - edsonjunior.sjc@gmail.com Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
    segunda-feira, 14 de novembro de 2011 11:19
  • Agora sim deu certinho a exclusão na tabela pelo DataGridView! Agora vou continuar o projeto aqui e se surgir mais um bug cabeludo espero contar com a a juda de todos!

    Valeu Edson pela força!


    Insistir sempre, desistir jamais!
    terça-feira, 15 de novembro de 2011 02:03