Jump to content
Sign in to follow this  
ProgramadoraR

retirar -1 numa coluna base dados

Recommended Posts

ProgramadoraR

Boas, no meu form tenho um datagridview em que mostra os dados de uma tabela, e o que eu quero fazer é para quando carregar num botao me tirar -1 duma coluna, como posso fazer?

Desde já obrigada

Share this post


Link to post
Share on other sites
NunoDinis

tens que ir buscar o valor da coluna que pretendes e decrementar..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
NunoDinis

Agora que estou na minha máquina, fiz-te um exemplo:

//declara variaveis
int i = dataGridView1.CurrentRow.Index,conta;
String decrementa;
//vai buscar o valor da coluna
decrementa = dataGridView1.CurrentRow.Cells["TESTE"].Value.ToString();
//converte para inteiro
int valor = Convert.ToInt32(decrementa);
conta = valor - 1;
//imprime
MessageBox.Show(conta.ToString());

Edited by Caça
GeSHi

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

Obrigada pela ajuda ele ja ta a fazer -1 (que mostra numa messagem)

mas nao ta a mudar na base dados, como é que eu posso fazer para ele ir buscar a base dados e fazer o -1?

Até agora tenho este codigo:

	 int i = dataGridView1.CurrentRow.Index, conta;
	 String decrementa;
	 SqlConnection sqlConn = null;
	 string strCoon = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\caminho para a base dados
	 sqlConn = new SqlConnection(strCoon);

	 try
	 {
		 sqlConn.Open();
		 string select = "select NomeColuna from NomeTabela";
		 SqlCommand cmd = new SqlCommand(select, sqlConn);
		 cmd = new SqlCommand(select, sqlConn);
		 SqlDataReader reader = cmd.ExecuteReader();	
		 decrementa = dataGridView1.CurrentRow.Cells["NomeColuna"].Value.ToString();
		 int valor = Convert.ToInt32(decrementa);
		 conta = valor - 1;
		 MessageBox.Show(conta.ToString());
	 }
	 catch (Exception ex)
	 {
		 MessageBox.Show(ex.Message);
	 }
	 finally
	 {
		 sqlConn.Close();
	 }

Edited by Caça
GeSHi

Share this post


Link to post
Share on other sites
ProgramadoraR

com este codigo se eu tiver 50 (por exemplo) na coluna que é para tirar -1 o que faz é mostrar-me uma mensagem com "49"

mas nao me altera na base dados para 49 (que é o que quero fazer)

Share this post


Link to post
Share on other sites
NunoDinis

Porque estás a fazer um SELECT e tens que fazer um UPDATE.

Algo deste género (BD SQL):


try
{
 SqlConnection sqlConn = null;
 string strCoon = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\caminho para a base dados"
 sqlConn = new SqlConnection(strCoon);

 conn.Open();
 using (SqlCommand cmd =
 new SqlCommand("UPDATE NOMETABELA SET CAMPODECREMENTADO=@CAMPODECREMENTADO WHERE Id=@Id", conn))

 cmd.Parameters.AddWithValue("@Id", 1);
 cmd.Parameters.AddWithValue("@CAMPODECREMENTADO", dataGridView1.CurrentRow.Cells["NomeColuna"].Value.ToString());
 int rows = cmd.ExecuteNonQuery();

}
catch (SqlException ex)
{
//Log exception
//Display Error message
}

Edited by Caça
GeSHi

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

	private void button1_Click(object sender, EventArgs e)
	{
	   int i = dataGridView1.CurrentRow.Index, conta;
	   String decrementa;
	   SqlConnection sqlConn = null;
	   string strCoon = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Caminho para a base dados";
	   sqlConn = new SqlConnection(strCoon);

	   try
	   {
		   sqlConn.Open();
		   string select = "select NomeColuna from NomeTabela";
		   SqlCommand cmd = new SqlCommand(select, sqlConn);
		   cmd = new SqlCommand(select, sqlConn);
		   SqlDataReader reader = cmd.ExecuteReader();	
		   decrementa = dataGridView1.CurrentRow.Cells["NomeColuna"].Value.ToString();
		   int valor = Convert.ToInt32(decrementa);
		   conta = valor - 1;
		   MessageBox.Show(conta.ToString());

reader.Close();
reader.Dispose();
		   string update = "update NomeTabela set  NomeColuna=@NomeColuna where ID = @ID";
		   SqlCommand cmd1 = new SqlCommand(update, sqlConn);
		   cmd1.Parameters.Add("@ID", SqlDbType.Int).Value = txtID.Text;
		   cmd1.Parameters.AddWithValue("@NomeColuna", dataGridView1.CurrentRow.Cells["NomeColuna"].Value.ToString());
		   int rows = cmd1.ExecuteNonQuery();

	   }
	   catch (Exception ex)
	   {
		   MessageBox.Show(ex.Message);
	   }
	   finally
	   {
		   sqlConn.Close();
	   }
	}

Continua a mandar a messagem com "49" mas nao me altera na base dados :/

Edited by ProgramadoraR
Falta LP no GeSHi

Share this post


Link to post
Share on other sites
NunoDinis

Não podes fazer as duas operações no mesmo botão. Estás a carregar os dados quando carregas no botão 1, e a fazer o update também nesse botão, ao mesmo tempo.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

entao como é que faço?

ja experimentei meter o select dentro de um metodo e depois chama-lo no botao e de seguida meter o codigo para alterar mas também nao da :/

Share this post


Link to post
Share on other sites
NunoDinis

Abastece a tua datagrid quando ela é chamada. Evento Load.

Quando o fizeres posta o código e diz-me se está a carregar direitinho..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
NunoDinis

A datagrid vai ser só para inserires valores ou também vai ter registos abastecidos pela base de dados ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

a unica coisa que faz é tirar-me -1 duma coluna (a que é selecionada), ou seja, faço um select e update

Edited by ProgramadoraR

Share this post


Link to post
Share on other sites
NunoDinis

Não, estás a pensar completamente errado!

Para fazer o update, não tens que fazer o select quando carregas na celula da datagrid.. faz como te disse: no evento load do formulário põe o código para abastecer a datagrid (o select). Se tiveres dúvidas vê aqui.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

Boas, agora estou com um problema parecido ao anterior.

Eu tenho duas tabelas (tabela1 e tabela2)

E tenho um form com um datagridview em que mostra os dados da tabela1, no qual uma coluna da tabela1 tem o id da tabela2, e estas estão relacionadas

E o meu objectivo é quando selecionar uma linha num datagridview com os dados da tabela1 que tem esse id alterar-me os dados da tabela2 com o mesmo id da tabela1

E entao o que eu tenho de fazer, penso que seja um select do id da tabela1, para depois fazer um update na tabela2 da linha que foi selecionada, certo?

Desde já obrigada

Share this post


Link to post
Share on other sites
NunoDinis

Se já tens os dados listados não precisas de select. Precisas apenas de ir buscar os valores dessa linha e fazer o update na tabela2..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
ProgramadoraR

hummm, ya.... Obrigada :)

Mas o que quero fazer é alterar o valor da outra tabela. entao so faço um update

mas como tou a fazer um calculo que por acaso é igual ao anterior... mas tá-me a dar um erro :/

o erro que me dá é: "Column named NomeColunaQueÉParaSerAlterada cannot be found. Parameter name: clumnName"

Edited by ProgramadoraR
GeSHi

Share this post


Link to post
Share on other sites
NunoDinis

Olha o nome que estás a dizer que a coluna tem..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.