• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

taquelim

Passar variaveis de forms para forms

13 mensagens neste tópico

Boas,

Minha duvida é a seguinte:

Estou a fazer um "jogo" de perguntas, que o primeiro formulário tem a validação do login, no caso de estar vazio ou não, que insere o nome na base de dados com o seguinte codigo

string constr = @"data source=.\sqlexpress;database=taqdores;integrated security=true";
            SqlConnection conn = new SqlConnection(constr);
            String query = "INSERT INTO utilizador(nome,pontuacao,categoria) values (@Username,1,1)";
            SqlCommand comando = new SqlCommand(query, conn);
            comando.Parameters.AddWithValue("@Username", textBox1.Text);
            if (textBox1.Text == "")
            {
                MessageBox.Show("Insere um nome para jogar", "Aviso");
            }
            else
            {
                conn.Open();
                comando.ExecuteNonQuery();
                MessageBox.Show("Ok '"+ textBox1.Text +"' estás pronto para começar");
                conn.Close();
                Form2 g = new Form2();
                g.Show();
                this.Hide();
            }

*Nota- nesta alínea "(@Username,1,1)" o facto de os valores estarem "1" é porque no fim das perguntas aqilo faz um updade*

a minha duvida é, como posso fazer o update no final das perguntas noutro form. eu tenho  assim

String query = "UPDATE utilizador SET pontuacao=@pontuacao, categoria='ingles' WHERE utilizador=??";
            //    SqlCommand comando = new SqlCommand(query, conn);
            //    comando.Parameters.AddWithValue("@pontuacao", pontuacao);
            //    conn.Open();
            //    comando.ExecuteNonQuery();
            //    conn.Close();

o problema está na parte do WHERE utilizador, que nao sei como ir buscar o utilizador q foi inserido

Desculpem se fui confuso e peço que me tentem ajudar sff. é urgente

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque é não inseres tudo no fim qd já tens a pontuação?

Para fazeres como estás a dizer, tens q guardar um id do utilizador q inseriste para depois fazeres o update ao utilizador com esse id.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tambem  ja puz essa hipotese mas preferia assim, como faço isso do "tens q guardar um id do utilizador q inseriste para depois fazeres o update ao utilizador com esse id." ja agora obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando fazes um insert numa tabela com um campo identidade, é atribuido um nr automaticamente a esse campo. podes obtê-lo com: select @@identity depois do insert.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu faço entao o insert no fim, agora outra pergunta:

            string constr = @"data source=.\sqlexpress;database=taqdores;integrated security=true";
            SqlConnection conn = new SqlConnection(constr);
            string sql = @"select id_pergunta, pergunta, opcao1, opcao2,opcao3,opcao4, resposta, disciplina from perguntas where disciplina='ingles' and nivel=" + l.ToString(); *l variavel de acordo com o nivel*
            SqlDataAdapter dataadapter = new SqlDataAdapter(sql, constr);
            DataSet dataset = new DataSet();
            dataadapter.Fill(dataset, "perguntas");
            Random randomNumber = new Random();
            int rndNum = randomNumber.Next(1, 4);
            DataRow[] labelRow = dataset.Tables["perguntas"].Select();
            label1.Text = Convert.ToString(labelRow[rndNum]["pergunta"]);
            label2.Text = Convert.ToString(labelRow[rndNum]["disciplina"]);
            radioButton1.Text = Convert.ToString(labelRow[rndNum]["opcao1"]);
            radioButton2.Text = Convert.ToString(labelRow[rndNum]["opcao2"]);
            radioButton3.Text = Convert.ToString(labelRow[rndNum]["opcao3"]);
            radioButton4.Text = Convert.ToString(labelRow[rndNum]["opcao4"]);
            resposta_id = Convert.ToInt16(labelRow[rndNum]["id_pergunta"]);
            resposta_cer = Convert.ToInt16(labelRow[rndNum]["resposta"]);

com este codigo vai escolher uma pergunta random da Base de dados, mas a resposta vai ser random tambem (resposta_cer = Convert.ToInt16(labelRow[rndNum]["resposta"])) , mesmo pondo a resposta certa diz q é errada, o que posso fazer para ficar bem por favor?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

logo a seguir a isso que pus anterior    tenho isto :

 if (resposta_cer == r)
            {
                label3.Text = "Resposta correcta";
                pontuacao = pontuacao + 10;
                label4.Text = pontuacao.ToString();
            }
            else
            {
                label3.Text = "Resposta incorrecta";
                pontuacao = pontuacao + 5;
                label4.Text = pontuacao.ToString();
            }


esse "r" é isto
      if (radioButton1.Checked == true)
            {
                r = 1;
            }
            else if (radioButton2.Checked == true)
            {
                r = 2;
            }
            else if (radioButton3.Checked == true)
            {
                r = 3;
            }
            else if (radioButton4.Checked == true)
            {
                r = 4;
            }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vais ter q fazer debug para resolver isso.

Mete um breakpoint em:

if (resposta_cer == r)

e vê o q está nas 2 variaveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quer que eu lhe envie o programa para ver melhor ? :x

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não. Quero que metas um breakpoint e vejas o que está nas 2 variáveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu fiz isso, e a resposta_cer = 2 e o r = 1, e eu nas radio escolhi a opção correcta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De acordo com o teu código isso vai dar falso, tens q ver onde é q esses valores estão a ir errados e perceber pq.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como posso fazer para em vez de ser random "radioButton1.Text = Convert.ToString(labelRow[rndNum]["opcao1"]);" fique pela ordem que está na base de dados? é q se tirar o [rndNum] da erro

0

Partilhar esta mensagem


Link 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