Usuário com melhor resposta
Nenhum valor foi fornecido para um ou mais parâmetros necessários

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!
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.- Editado Levi DomingosModerator sábado, 12 de novembro de 2011 19:52
- Marcado como Resposta Levi DomingosModerator segunda-feira, 14 de novembro de 2011 15:02
-
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.- Marcado como Resposta Levi DomingosModerator segunda-feira, 14 de novembro de 2011 15:02
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. -
-
-
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. -
-
-
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. -
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! -
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. -
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! -
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. -
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. -
-
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.- Editado Levi DomingosModerator sábado, 12 de novembro de 2011 19:52
- Marcado como Resposta Levi DomingosModerator segunda-feira, 14 de novembro de 2011 15:02
-
-
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. -
-
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. -
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! -
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.- Marcado como Resposta Levi DomingosModerator segunda-feira, 14 de novembro de 2011 15:02
-