Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ProgramadoraR

retirar -1 numa coluna base dados

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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());

Editado por Caça
GeSHi

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

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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();
	 }

Editado por Caça
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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
}

Editado por Caça
GeSHi

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

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :/

Editado por ProgramadoraR
Falta LP no GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ProgramadoraR

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

Editado por ProgramadoraR

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Editado por ProgramadoraR
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.