Usuário com melhor resposta
Como controlar as fases de um QUIZ usando C- Sharp (C#)

Pergunta
-
Boa dia,
Se pudererem me ajudar agradeço.
Sou leigo em programação, mas estou estudando e me esforçando
Projeto QUIZ:
Tenho um Form com 5 picturebox com o evento click representando as Cinco (5) fases do Jogo, ST(STARTER), IN(INTERMEDIATE), AD(ADVANCED), EX(EXPERT) E MA(MASTER), esse Form é carregado depois do Login:
Carregar as fases com as perguntas isso já está pronto e funcionando, o problema é que todas as fases ficam ativas, então o usuário poderia escolher qualquer uma, e não é isso que eu quero.
O que eu preciso é que toda vez que o usuário jogar a primeira fase ele desabilita a mesma(ex.: fase1.enabled = false;) e habilita a próxima, e assim sucessivamente até terminar as fases.
Olha só , a lógica eu sei só não estou conseguindo aplicar o código, pensei assim:
- Criar uma coluna na tabela tbl_login UltimaFase e armazenar os nomes das fases, e assim fazer o controle, mas como disse anteriormente sou leigo em c#, mas estou estudando e me esforçando.
Desde de já agradeço
Edson
Respostas
-
Boa Tarde Rodrigo,
Esqueci de perguntar,
Onde eu colocaria esse código? no form do login ou no form das fases?
Atenciosamente,
Edson
- Editado Rodrigo CdS quarta-feira, 24 de maio de 2017 16:38
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
Olá, Edson! Desculpe pela demora na resposta, pois estou enrolado aqui.
Tenta aplicar as alterações que fiz abaixo - se não puder substituir todo o seu código por este, compare com o seu e aplica as alterações que fiz. Observe que pode ocorrer algum erro, pois não tenho como testar. Escrevi o código de forma que conforme as fases avancem, as fases anteriores sejam desabilitadas.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlServerCe; namespace Responda { public partial class Form2 : Form { string pasta_images = ""; Image img_normal; Image img_high; Image img_disabled; Image img_normal2; Image img_high2; public Form2() { InitializeComponent(); pasta_images = Application.StartupPath + @"\imagens\"; img_normal = Image.FromFile(pasta_images + "FaseNormal.png"); img_high = Image.FromFile(pasta_images + "FaseHigt.png"); img_disabled = Image.FromFile(pasta_images + "FaseDesativado.png"); img_normal2 = Image.FromFile(pasta_images + "pensandoNormal.png"); img_high2 = Image.FromFile(pasta_images + "pensandoHigh.png"); this.AtualizaHabilitacaoFases(this.GetUltimaFase()); } private void Form2_Load(object sender, EventArgs e) { if (UsuarioLogado.NomeUsuario == "Admin") menuStrip1.Visible = true; else { menuStrip1.Visible = false; } /* fase1.BackgroundImage = img_normal; fase2.BackgroundImage = img_normal; fase3.BackgroundImage = img_normal; fase4.BackgroundImage = img_normal; fase5.BackgroundImage = img_normal; */ btn_voltar.BackgroundImage = img_normal2; } /// <summary> /// Obtém na tabela de login a última fase jogada pelo usuário. /// </summary> private string GetUltimaFase() { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("select UltimaFase tbl_login where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); string ultimaFase; try { con.Open(); ultimaFase = cad.ExecuteScalar(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); } return ultimaFase; } /// <summary> /// Habilita e desabilita as fases conforme atualização da ultima fase jogada. /// </summary> private void AtualizaHabilitacaoFases(string ultimaFase) { if(string.IsNullOrEmpty(ultimaFase)) { fase1.Enabled = true; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase1.Text) { fase1.Enabled = false; fase2.Enabled = true; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase2.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = true; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase3.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = true; fase5.Enabled = false; } else if (ultimaFase == lblFase4.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = true; } else if (ultimaFase == lblFase5.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } } private void perguntasToolStripMenuItem_Click(object sender, EventArgs e) { CadastroPerguntas perg = new CadastroPerguntas(); perg.ShowDialog(); } private void rankingToolStripMenuItem_Click(object sender, EventArgs e) { relPontos rel = new relPontos(); rel.ShowDialog(); } private void cadastroToolStripMenuItem_Click(object sender, EventArgs e) { CadastroPontos cadPontos = new CadastroPontos(); cadPontos.ShowDialog(); } private void cadastroToolStripMenuItem1_Click(object sender, EventArgs e) { CadastroUsuario cadastro = new CadastroUsuario(); cadastro.Show(); } private void alterarToolStripMenuItem_Click(object sender, EventArgs e) { AlterarUsuario alterar = new AlterarUsuario(); alterar.Show(); } private void fase1_MouseEnter(object sender, EventArgs e) { fase1.BackgroundImage = img_high; } private void fase1_MouseLeave(object sender, EventArgs e) { fase1.BackgroundImage = img_normal; } private void fase1_EnabledChanged(object sender, EventArgs e) { if (fase1.Enabled) fase1.BackgroundImage = img_normal; else fase1.BackgroundImage = img_disabled; } private void fase1_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase1.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase1.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase2_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase2.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase2.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase3_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase3.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase3.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase4_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase4.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase4.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase5_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase5.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase5.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase2_MouseEnter(object sender, EventArgs e) { fase2.BackgroundImage = img_high; } private void fase2_MouseLeave(object sender, EventArgs e) { fase2.BackgroundImage = img_normal; } private void fase2_EnabledChanged(object sender, EventArgs e) { if (fase2.Enabled) fase2.BackgroundImage = img_normal; else fase2.BackgroundImage = img_disabled; } private void fase3_MouseEnter(object sender, EventArgs e) { fase3.BackgroundImage = img_high; } private void fase3_MouseLeave(object sender, EventArgs e) { fase3.BackgroundImage = img_normal; } private void fase3_EnabledChanged(object sender, EventArgs e) { if (fase3.Enabled) fase3.BackgroundImage = img_normal; else fase3.BackgroundImage = img_disabled; } private void fase4_MouseEnter(object sender, EventArgs e) { fase4.BackgroundImage = img_high; } private void fase4_MouseLeave(object sender, EventArgs e) { fase4.BackgroundImage = img_normal; } private void fase4_EnabledChanged(object sender, EventArgs e) { if (fase4.Enabled) fase4.BackgroundImage = img_normal; else fase4.BackgroundImage = img_disabled; } private void fase5_MouseEnter(object sender, EventArgs e) { fase5.BackgroundImage = img_high; } private void fase5_MouseLeave(object sender, EventArgs e) { fase5.BackgroundImage = img_normal; } private void fase5_EnabledChanged(object sender, EventArgs e) { if (fase5.Enabled) fase5.BackgroundImage = img_normal; else fase5.BackgroundImage = img_disabled; } private void btn_voltar_MouseEnter(object sender, EventArgs e) { btn_voltar.BackgroundImage = img_high2; } private void btn_voltar_MouseLeave(object sender, EventArgs e) { btn_voltar.BackgroundImage = img_normal2; } private void btn_voltar_Click(object sender, EventArgs e) { this.Hide(); Form1 login = new Form1(); login.ShowDialog(); } } }
Bom trabalho!
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
Boa Noite Rodrigo,
Fiz mais algumas alterações e testes aqui aparentemente deu certo.
Na string que vc criou eu declarei um valor vazio nela:
string ultimaFase = "";
E converti o cad.ExecuteScalar pra string:
ultimaFase = Convert.ToString(cad.ExecuteScalar());
Nesse if inclui um ||, fiz isso porque quando respondia a ultima fase não ativa a fase1, e o certo é dá um loop, indo e voltando pelas fases
É que no final das 5 fases os jogadores ganharão um prêmio, e dará início há uma nova rodada.
if (string.IsNullOrEmpty(ultimaFase) || ultimaFase == lblFase5.Text)
{
fase1.Enabled = true;
fase2.Enabled = false;
fase3.Enabled = false;
fase4.Enabled = false;
fase5.Enabled = false;}
Estou correto ou não?
Vou fazer mais alguns testes e posto o resultado pra vc.
Atenciosamente,
Edson
Está ótimo! Se está funcionando como você queria, está certo. Não há uma forma "certa" de como programar uma funcionalidade, já que existem n maneiras de se chegar ao mesmo resultado (desde que se chegue ao resultado desejado). O que existe - e você vai conhecer mais sobre isto - são boas práticas na programação.
Abraço, e sucesso!
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
Boa Dia Rodrigo,
Por gentileza, gostaria de sua ajuda mais uma vez.
Bom o que eu preciso:
Tenho duas tabelas SQL:
Pontuacao, com os campos usuario, pontos e data, essa tabela armazena o usuário logado, os pontos que ele ganhou e a data que jogou.
Premio, com os campos usuario, premio, pts_premio e data, essa tabela armazena o usuário logado, o premio que ele retirou, os pontos que esse prêmio equivale e a data que ele retirou.
O que eu gostaria de fazer é somar todos os pontos que ele fez e está armazenada coluna pontos da tabela Pontucao, somar todos os pontos da coluna pts_premios da tabela Premio, e depois fazer a subtração e me retornar o saldo de pontos que esse usuário ainda tem.
apresentar em um DATAGRIDVIEW se possível.
Ecemplo das tabelas:
Tabela Pontuacao
usuario pontos data
joao 200 25/05/2017
Eder 250 26/05/2017
joao 150 28/05/2017
Eder 100 29/05/2017
Anna 200 29/05/2017
Joao 240 30/05/2017
Tabela Premio
Usuario premio pts_pontos data
Joao boné 20 22/05/2017
Eder boné 20 23/05/2017
Joao camiseta 90 25/05/2017
Joao boné 20 26/05/2017
Eder óculos 100 25/05/2017
Anna boné 20 22/05/2017
Desde já agradeço
Edson Goveia
Olá, Edson!
A consulta pode ser assim (pegue apenas a consulta final, e substitua os nomes das tabelas pelas suas):
declare @Pontuacao table ( usuario varchar(50) , pontos int , data datetime ) insert into @Pontuacao values ('joao', 200, '2017-05-25') , ('Eder', 250, '2017-05-26') , ('joao', 150, '2017-05-28') , ('Eder', 100, '2017-05-29') , ('Anna', 200, '2017-05-29') , ('Joao', 240, '2017-05-30') --select * from @Pontuacao declare @Premio table ( usuario varchar(50) , premio varchar(50) , pts_pontos int , data datetime ) insert into @Premio values ('Joao', 'boné', 20, '2017-05-22') , ('Eder', 'boné', 20, '2017-05-23') , ('Joao', 'camiseta', 90, '2017-05-25') , ('Joao', 'boné', 20, '2017-05-26') , ('Eder', 'óculos', 100, '2017-05-25') , ('Anna', 'boné', 20, '2017-05-22') --select * from @Premio select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos from @Pontuacao as Pontuacao cross apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
Esta query já serve para você simular os resultados. Para preencher um grid, segue o link onde há uma série de exemplos para você consultar. Sugiro utilizar o exemplo com o DataAdapter.
Mais uma coisa: sugiro você ter uma coluna com o Id do usuário nas suas tabelas, pois utilizar strings como chave não é aconselhável. Bom trabalho!
- Editado Rodrigo CdS segunda-feira, 5 de junho de 2017 00:28
- Marcado como Resposta Edson535 quinta-feira, 8 de junho de 2017 14:27
-
Boa Noite Rodrigo,
Desde de já obrigado por estar disposto em me ajudar.
É o seguinte fiz o teste aqui, deu certo apenas o seguinte:
Nessa consulta que me passou retorna o total de pontos ganhos (Pontos) e total de pontos dos premios (PontosGastos) por usuário, até aí tudo bem deu certo.
O que faltou foi a criação de uma coluna com o saldo da subtração da coluna Pontos - PontosGastos
Pontos - PontosGastos = SaldoPontos
Atenciosamente,
Edson
Segue:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos , sum(Pontuacao.pontos) - Premio.Pontos as SaldoPontos from @Pontuacao as Pontuacao cross apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
- Marcado como Resposta Edson535 quinta-feira, 8 de junho de 2017 14:27
-
Boa Noite Rodrigo,
Deu certo essa consulta, mas tem um outro detalhe, o resultado que aparece é esse:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Mas gostaria que esse Select mostrasse também os Usuarios que que não resgatou nada, por exemplo, ficaria assim:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Anna 5000 5000
Marcelo 3000 3000
Marcos 1400 400 1000
Marcia 500 200 300
Adriano 4200 4200
Entendeu?
desde Já Agradeço
Edson
Tenta isto:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , isnull(Premio.Pontos, 0) as PontosGastos , sum(Pontuacao.pontos) - isnull(Premio.Pontos, 0) as SaldoPontos from @Pontuacao as Pontuacao outer apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
Bom trabalho!
- Marcado como Resposta Edson535 sexta-feira, 9 de junho de 2017 13:51
-
Fiz esse procedimento, mas continua não carregado o datagridview
A consulta funciona perfeitamente, me trás os resultados que eu preciso, só não consigo carregar essa consulta num DataGridView.
Atenciosamente,
Edson
- Marcado como Resposta Edson535 sábado, 10 de junho de 2017 14:52
-
Fiz esse procedimento, mas continua não carregado o datagridview
A consulta funciona perfeitamente, me trás os resultados que eu preciso, só não consigo carregar essa consulta num DataGridView.
Atenciosamente,
Edson
A princípio está tudo certo na codificação. Você viu que a consulta traz os valores corretamente ao debugar o fonte? Se sim, você verificou se o dataTable está preenchido? Pelo que pude verificar do código, se a consulta está retornando o resultado, deveria preencher o grid, a não ser que você tenha algum outro método que é executado depois deste que reseta o datasource.O erro que dá é nessa inha do código:
sqlCeDataAdapter.Fill(dataTable);
O interessante é que na consulta sem o atributo isnull ou coalesce carrega o datagridview certinho, já se eu colocar esse atributo não carrega e dá esse erro.
Atenciosamente,
Edson
Todas as Respostas
-
Olá, Edson!
Considerando a coluna que você falou que iria criar, você pode iniciar todos os picture box desabilitados (Enabled == false), e depois escrever uma sequencia de ifs para definir qual será habilitado:
// Onde x equivale ao índice da coluna referente ao campo da fase que o jogador está this.pictureBox1.Enabled = false; this.pictureBox2.Enabled = false; if (Convert.ToInt32(dt.Rows[0].ItemArray[x]) == 1) { this.pictureBox1.Enabled = true; } else if (Convert.ToInt32(dt.Rows[0].ItemArray[x]) == 2) { this.pictureBox2.Enabled = true; }
Se não for isto, responde aí para que possamos te ajudar.
Bom trabalho!
-
-
Bom dia Edson535
Ficamos no aguardo de um retorno.
Atenciosamente,
Guilherme Macedo S
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
TechNet Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
-
Boa Tarde Rodrigo,
Esqueci de perguntar,
Onde eu colocaria esse código? no form do login ou no form das fases?
Atenciosamente,
Edson
- Editado Rodrigo CdS quarta-feira, 24 de maio de 2017 16:38
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
Boa Tarde Rodrigo,
Cara, a gente que não entende de desenvolvimento pena hein, mas se Deus quiser eu vou aprender, estou estudando.
Tentei implementar aqui a sua sugestão, mas deu um nó na minha cabeça, kkk.
Criei a coluna UltimaFase na tabela tbl_login, no eventos click das picturebox que representa as fases coloquei o UPDATE pra atualizar a coluna toda vez que entrar, isso eu consegui fazer e está atualizando corretamente.
O que não estou conseguindo é implementar esse controle que vc me passou.
Olha só esse é o código do form das fases onde tem essas 5 picturebox e as cinco labels(ST, IN, AD, EX, MA), da imagem que postei acima, vè se pode me ajudar com o código por gentileza:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlServerCe;
namespace Responda
{
public partial class Form2 : Form
{
string pasta_images = "";
Image img_normal;
Image img_high;
Image img_disabled;
Image img_normal2;
Image img_high2;
public Form2()
{
InitializeComponent();
pasta_images = Application.StartupPath + @"\imagens\";
img_normal = Image.FromFile(pasta_images + "FaseNormal.png");
img_high = Image.FromFile(pasta_images + "FaseHigt.png");
img_disabled = Image.FromFile(pasta_images + "FaseDesativado.png");
img_normal2 = Image.FromFile(pasta_images + "pensandoNormal.png");
img_high2 = Image.FromFile(pasta_images + "pensandoHigh.png");
}
private void Form2_Load(object sender, EventArgs e)
{
if (UsuarioLogado.NomeUsuario == "Admin")
menuStrip1.Visible = true;
else
{
menuStrip1.Visible = false;
}
fase1.BackgroundImage = img_normal;
fase2.BackgroundImage = img_normal;
fase3.BackgroundImage = img_normal;
fase4.BackgroundImage = img_normal;
fase5.BackgroundImage = img_normal;
btn_voltar.BackgroundImage = img_normal2;
}
private void perguntasToolStripMenuItem_Click(object sender, EventArgs e)
{
CadastroPerguntas perg = new CadastroPerguntas();
perg.ShowDialog();
}
private void rankingToolStripMenuItem_Click(object sender, EventArgs e)
{
relPontos rel = new relPontos();
rel.ShowDialog();
}
private void cadastroToolStripMenuItem_Click(object sender, EventArgs e)
{
CadastroPontos cadPontos = new CadastroPontos();
cadPontos.ShowDialog();
}
private void cadastroToolStripMenuItem1_Click(object sender, EventArgs e)
{
CadastroUsuario cadastro = new CadastroUsuario();
cadastro.Show();
}
private void alterarToolStripMenuItem_Click(object sender, EventArgs e)
{
AlterarUsuario alterar = new AlterarUsuario();
alterar.Show();
}
private void fase1_MouseEnter(object sender, EventArgs e)
{
fase1.BackgroundImage = img_high;
}
private void fase1_MouseLeave(object sender, EventArgs e)
{
fase1.BackgroundImage = img_normal;
}
private void fase1_EnabledChanged(object sender, EventArgs e)
{
if (fase1.Enabled)
fase1.BackgroundImage = img_normal;
else
fase1.BackgroundImage = img_disabled;
}
private void fase1_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con);
SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar);
UltimaFase.Value = lblFase1.Text ;
cad.Parameters.Add(UltimaFase);
try
{
con.Open();
cad.ExecuteNonQuery();
//MessageBox.Show("Alterado com Sucesso!!");
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}
this.Close();
per1 p1 = new per1();
p1.ShowDialog();
}private void fase2_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con);
SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar);
UltimaFase.Value = lblFase2.Text ;
cad.Parameters.Add(UltimaFase);
try
{
con.Open();
cad.ExecuteNonQuery();
//MessageBox.Show("Alterado com Sucesso!!");
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}
this.Close();
per1 p1 = new per1();
p1.ShowDialog();
}private void fase3_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con);
SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar);
UltimaFase.Value = lblFase3.Text ;
cad.Parameters.Add(UltimaFase);
try
{
con.Open();
cad.ExecuteNonQuery();
//MessageBox.Show("Alterado com Sucesso!!");
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}
this.Close();
per1 p1 = new per1();
p1.ShowDialog();
}private void fase4_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con);
SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar);
UltimaFase.Value = lblFase4.Text ;
cad.Parameters.Add(UltimaFase);
try
{
con.Open();
cad.ExecuteNonQuery();
//MessageBox.Show("Alterado com Sucesso!!");
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}
this.Close();
per1 p1 = new per1();
p1.ShowDialog();
}private void fase5_Click(object sender, EventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con);
SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar);
UltimaFase.Value = lblFase5.Text ;
cad.Parameters.Add(UltimaFase);
try
{
con.Open();
cad.ExecuteNonQuery();
//MessageBox.Show("Alterado com Sucesso!!");
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}
this.Close();
per1 p1 = new per1();
p1.ShowDialog();
}
private void fase2_MouseEnter(object sender, EventArgs e)
{
fase2.BackgroundImage = img_high;
}
private void fase2_MouseLeave(object sender, EventArgs e)
{
fase2.BackgroundImage = img_normal;
}
private void fase2_EnabledChanged(object sender, EventArgs e)
{
if (fase2.Enabled)
fase2.BackgroundImage = img_normal;
else
fase2.BackgroundImage = img_disabled;
}
private void fase3_MouseEnter(object sender, EventArgs e)
{
fase3.BackgroundImage = img_high;
}
private void fase3_MouseLeave(object sender, EventArgs e)
{
fase3.BackgroundImage = img_normal;
}
private void fase3_EnabledChanged(object sender, EventArgs e)
{
if (fase3.Enabled)
fase3.BackgroundImage = img_normal;
else
fase3.BackgroundImage = img_disabled;
}
private void fase4_MouseEnter(object sender, EventArgs e)
{
fase4.BackgroundImage = img_high;
}
private void fase4_MouseLeave(object sender, EventArgs e)
{
fase4.BackgroundImage = img_normal;
}
private void fase4_EnabledChanged(object sender, EventArgs e)
{
if (fase4.Enabled)
fase4.BackgroundImage = img_normal;
else
fase4.BackgroundImage = img_disabled;
}
private void fase5_MouseEnter(object sender, EventArgs e)
{
fase5.BackgroundImage = img_high;
}
private void fase5_MouseLeave(object sender, EventArgs e)
{
fase5.BackgroundImage = img_normal;
}
private void fase5_EnabledChanged(object sender, EventArgs e)
{
if (fase5.Enabled)
fase5.BackgroundImage = img_normal;
else
fase5.BackgroundImage = img_disabled;
}
private void btn_voltar_MouseEnter(object sender, EventArgs e)
{
btn_voltar.BackgroundImage = img_high2;
}
private void btn_voltar_MouseLeave(object sender, EventArgs e)
{
btn_voltar.BackgroundImage = img_normal2;
}
private void btn_voltar_Click(object sender, EventArgs e)
{
this.Hide();
Form1 login = new Form1();
login.ShowDialog();
}
}
}
- Editado Edson535 quarta-feira, 24 de maio de 2017 20:44
-
Olá, Edson! Desculpe pela demora na resposta, pois estou enrolado aqui.
Tenta aplicar as alterações que fiz abaixo - se não puder substituir todo o seu código por este, compare com o seu e aplica as alterações que fiz. Observe que pode ocorrer algum erro, pois não tenho como testar. Escrevi o código de forma que conforme as fases avancem, as fases anteriores sejam desabilitadas.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlServerCe; namespace Responda { public partial class Form2 : Form { string pasta_images = ""; Image img_normal; Image img_high; Image img_disabled; Image img_normal2; Image img_high2; public Form2() { InitializeComponent(); pasta_images = Application.StartupPath + @"\imagens\"; img_normal = Image.FromFile(pasta_images + "FaseNormal.png"); img_high = Image.FromFile(pasta_images + "FaseHigt.png"); img_disabled = Image.FromFile(pasta_images + "FaseDesativado.png"); img_normal2 = Image.FromFile(pasta_images + "pensandoNormal.png"); img_high2 = Image.FromFile(pasta_images + "pensandoHigh.png"); this.AtualizaHabilitacaoFases(this.GetUltimaFase()); } private void Form2_Load(object sender, EventArgs e) { if (UsuarioLogado.NomeUsuario == "Admin") menuStrip1.Visible = true; else { menuStrip1.Visible = false; } /* fase1.BackgroundImage = img_normal; fase2.BackgroundImage = img_normal; fase3.BackgroundImage = img_normal; fase4.BackgroundImage = img_normal; fase5.BackgroundImage = img_normal; */ btn_voltar.BackgroundImage = img_normal2; } /// <summary> /// Obtém na tabela de login a última fase jogada pelo usuário. /// </summary> private string GetUltimaFase() { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("select UltimaFase tbl_login where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); string ultimaFase; try { con.Open(); ultimaFase = cad.ExecuteScalar(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); } return ultimaFase; } /// <summary> /// Habilita e desabilita as fases conforme atualização da ultima fase jogada. /// </summary> private void AtualizaHabilitacaoFases(string ultimaFase) { if(string.IsNullOrEmpty(ultimaFase)) { fase1.Enabled = true; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase1.Text) { fase1.Enabled = false; fase2.Enabled = true; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase2.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = true; fase4.Enabled = false; fase5.Enabled = false; } else if (ultimaFase == lblFase3.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = true; fase5.Enabled = false; } else if (ultimaFase == lblFase4.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = true; } else if (ultimaFase == lblFase5.Text) { fase1.Enabled = false; fase2.Enabled = false; fase3.Enabled = false; fase4.Enabled = false; fase5.Enabled = false; } } private void perguntasToolStripMenuItem_Click(object sender, EventArgs e) { CadastroPerguntas perg = new CadastroPerguntas(); perg.ShowDialog(); } private void rankingToolStripMenuItem_Click(object sender, EventArgs e) { relPontos rel = new relPontos(); rel.ShowDialog(); } private void cadastroToolStripMenuItem_Click(object sender, EventArgs e) { CadastroPontos cadPontos = new CadastroPontos(); cadPontos.ShowDialog(); } private void cadastroToolStripMenuItem1_Click(object sender, EventArgs e) { CadastroUsuario cadastro = new CadastroUsuario(); cadastro.Show(); } private void alterarToolStripMenuItem_Click(object sender, EventArgs e) { AlterarUsuario alterar = new AlterarUsuario(); alterar.Show(); } private void fase1_MouseEnter(object sender, EventArgs e) { fase1.BackgroundImage = img_high; } private void fase1_MouseLeave(object sender, EventArgs e) { fase1.BackgroundImage = img_normal; } private void fase1_EnabledChanged(object sender, EventArgs e) { if (fase1.Enabled) fase1.BackgroundImage = img_normal; else fase1.BackgroundImage = img_disabled; } private void fase1_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase1.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase1.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase2_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase2.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase2.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase3_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase3.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase3.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase4_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase4.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase4.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase5_Click(object sender, EventArgs e) { SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True"); SqlCeCommand cad = new SqlCeCommand("update tbl_login set UltimaFase = @UltimaFase where (Usuario = '" + UsuarioLogado.NomeUsuario + "')", con); SqlCeParameter UltimaFase = new SqlCeParameter("@UltimaFase", SqlDbType.NVarChar); UltimaFase.Value = lblFase5.Text ; cad.Parameters.Add(UltimaFase); try { con.Open(); cad.ExecuteNonQuery(); //MessageBox.Show("Alterado com Sucesso!!"); } catch (Exception E) { MessageBox.Show(E.Message); } finally { con.Close(); this.AtualizaHabilitacaoFases(lblFase5.Text); } this.Close(); per1 p1 = new per1(); p1.ShowDialog(); } private void fase2_MouseEnter(object sender, EventArgs e) { fase2.BackgroundImage = img_high; } private void fase2_MouseLeave(object sender, EventArgs e) { fase2.BackgroundImage = img_normal; } private void fase2_EnabledChanged(object sender, EventArgs e) { if (fase2.Enabled) fase2.BackgroundImage = img_normal; else fase2.BackgroundImage = img_disabled; } private void fase3_MouseEnter(object sender, EventArgs e) { fase3.BackgroundImage = img_high; } private void fase3_MouseLeave(object sender, EventArgs e) { fase3.BackgroundImage = img_normal; } private void fase3_EnabledChanged(object sender, EventArgs e) { if (fase3.Enabled) fase3.BackgroundImage = img_normal; else fase3.BackgroundImage = img_disabled; } private void fase4_MouseEnter(object sender, EventArgs e) { fase4.BackgroundImage = img_high; } private void fase4_MouseLeave(object sender, EventArgs e) { fase4.BackgroundImage = img_normal; } private void fase4_EnabledChanged(object sender, EventArgs e) { if (fase4.Enabled) fase4.BackgroundImage = img_normal; else fase4.BackgroundImage = img_disabled; } private void fase5_MouseEnter(object sender, EventArgs e) { fase5.BackgroundImage = img_high; } private void fase5_MouseLeave(object sender, EventArgs e) { fase5.BackgroundImage = img_normal; } private void fase5_EnabledChanged(object sender, EventArgs e) { if (fase5.Enabled) fase5.BackgroundImage = img_normal; else fase5.BackgroundImage = img_disabled; } private void btn_voltar_MouseEnter(object sender, EventArgs e) { btn_voltar.BackgroundImage = img_high2; } private void btn_voltar_MouseLeave(object sender, EventArgs e) { btn_voltar.BackgroundImage = img_normal2; } private void btn_voltar_Click(object sender, EventArgs e) { this.Hide(); Form1 login = new Form1(); login.ShowDialog(); } } }
Bom trabalho!
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
Rodrigo meu irmão,
Muito obrigado mesmo, no final desse projeto, dando tudo certo, vou te pagar uma TUBAÍNA COM GELO E LIMÃO,kkkkkk. Brincadeira.
Mas pode ter certeza que te darei créditos no projeto. E quem sabe num futuro próximos quando eu aprender um pouco mais programação a gente montar aí uma parceria.
Sou do Estado de Rondônia, cidade Ariquemes, acho que vc consegue encontrar no mapa do Brasil, kkkkkk.
Não sei nem como agradecer, obrigado por sua gentileza e tempo pra responder.
Vou fazer os testes aqui, e posto logo a seguir com os resultados.
Desde já agradeço seu empenho em me ajudar!
Atenciosamente,
Edson
- Editado Edson535 quinta-feira, 25 de maio de 2017 17:30
-
-
Boa Noite Rodrigo,
Fiz mais algumas alterações e testes aqui aparentemente deu certo.
Na string que vc criou eu declarei um valor vazio nela:
string ultimaFase = "";
E converti o cad.ExecuteScalar pra string:
ultimaFase = Convert.ToString(cad.ExecuteScalar());
Nesse if inclui um ||, fiz isso porque quando respondia a ultima fase não ativa a fase1, e o certo é dá um loop, indo e voltando pelas fases
É que no final das 5 fases os jogadores ganharão um prêmio, e dará início há uma nova rodada.
if (string.IsNullOrEmpty(ultimaFase) || ultimaFase == lblFase5.Text)
{
fase1.Enabled = true;
fase2.Enabled = false;
fase3.Enabled = false;
fase4.Enabled = false;
fase5.Enabled = false;}
Estou correto ou não?
Vou fazer mais alguns testes e posto o resultado pra vc.
Atenciosamente,
Edson
-
Boa Noite Rodrigo,
Fiz mais algumas alterações e testes aqui aparentemente deu certo.
Na string que vc criou eu declarei um valor vazio nela:
string ultimaFase = "";
E converti o cad.ExecuteScalar pra string:
ultimaFase = Convert.ToString(cad.ExecuteScalar());
Nesse if inclui um ||, fiz isso porque quando respondia a ultima fase não ativa a fase1, e o certo é dá um loop, indo e voltando pelas fases
É que no final das 5 fases os jogadores ganharão um prêmio, e dará início há uma nova rodada.
if (string.IsNullOrEmpty(ultimaFase) || ultimaFase == lblFase5.Text)
{
fase1.Enabled = true;
fase2.Enabled = false;
fase3.Enabled = false;
fase4.Enabled = false;
fase5.Enabled = false;}
Estou correto ou não?
Vou fazer mais alguns testes e posto o resultado pra vc.
Atenciosamente,
Edson
Está ótimo! Se está funcionando como você queria, está certo. Não há uma forma "certa" de como programar uma funcionalidade, já que existem n maneiras de se chegar ao mesmo resultado (desde que se chegue ao resultado desejado). O que existe - e você vai conhecer mais sobre isto - são boas práticas na programação.
Abraço, e sucesso!
- Marcado como Resposta Edson535 sexta-feira, 26 de maio de 2017 14:28
-
-
Boa Dia Rodrigo,
Por gentileza, gostaria de sua ajuda mais uma vez.
Bom o que eu preciso:
Tenho duas tabelas SQL:
Pontuacao, com os campos usuario, pontos e data, essa tabela armazena o usuário logado, os pontos que ele ganhou e a data que jogou.
Premio, com os campos usuario, premio, pts_premio e data, essa tabela armazena o usuário logado, o premio que ele retirou, os pontos que esse prêmio equivale e a data que ele retirou.
O que eu gostaria de fazer é somar todos os pontos que ele fez e está armazenada coluna pontos da tabela Pontucao, somar todos os pontos da coluna pts_premios da tabela Premio, e depois fazer a subtração e me retornar o saldo de pontos que esse usuário ainda tem.
apresentar em um DATAGRIDVIEW se possível.
Ecemplo das tabelas:
Tabela Pontuacao
usuario pontos data
joao 200 25/05/2017
Eder 250 26/05/2017
joao 150 28/05/2017
Eder 100 29/05/2017
Anna 200 29/05/2017
Joao 240 30/05/2017
Tabela Premio
Usuario premio pts_pontos data
Joao boné 20 22/05/2017
Eder boné 20 23/05/2017
Joao camiseta 90 25/05/2017
Joao boné 20 26/05/2017
Eder óculos 100 25/05/2017
Anna boné 20 22/05/2017
Desde já agradeço
Edson Goveia
-
Boa Dia Rodrigo,
Por gentileza, gostaria de sua ajuda mais uma vez.
Bom o que eu preciso:
Tenho duas tabelas SQL:
Pontuacao, com os campos usuario, pontos e data, essa tabela armazena o usuário logado, os pontos que ele ganhou e a data que jogou.
Premio, com os campos usuario, premio, pts_premio e data, essa tabela armazena o usuário logado, o premio que ele retirou, os pontos que esse prêmio equivale e a data que ele retirou.
O que eu gostaria de fazer é somar todos os pontos que ele fez e está armazenada coluna pontos da tabela Pontucao, somar todos os pontos da coluna pts_premios da tabela Premio, e depois fazer a subtração e me retornar o saldo de pontos que esse usuário ainda tem.
apresentar em um DATAGRIDVIEW se possível.
Ecemplo das tabelas:
Tabela Pontuacao
usuario pontos data
joao 200 25/05/2017
Eder 250 26/05/2017
joao 150 28/05/2017
Eder 100 29/05/2017
Anna 200 29/05/2017
Joao 240 30/05/2017
Tabela Premio
Usuario premio pts_pontos data
Joao boné 20 22/05/2017
Eder boné 20 23/05/2017
Joao camiseta 90 25/05/2017
Joao boné 20 26/05/2017
Eder óculos 100 25/05/2017
Anna boné 20 22/05/2017
Desde já agradeço
Edson Goveia
Olá, Edson!
A consulta pode ser assim (pegue apenas a consulta final, e substitua os nomes das tabelas pelas suas):
declare @Pontuacao table ( usuario varchar(50) , pontos int , data datetime ) insert into @Pontuacao values ('joao', 200, '2017-05-25') , ('Eder', 250, '2017-05-26') , ('joao', 150, '2017-05-28') , ('Eder', 100, '2017-05-29') , ('Anna', 200, '2017-05-29') , ('Joao', 240, '2017-05-30') --select * from @Pontuacao declare @Premio table ( usuario varchar(50) , premio varchar(50) , pts_pontos int , data datetime ) insert into @Premio values ('Joao', 'boné', 20, '2017-05-22') , ('Eder', 'boné', 20, '2017-05-23') , ('Joao', 'camiseta', 90, '2017-05-25') , ('Joao', 'boné', 20, '2017-05-26') , ('Eder', 'óculos', 100, '2017-05-25') , ('Anna', 'boné', 20, '2017-05-22') --select * from @Premio select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos from @Pontuacao as Pontuacao cross apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
Esta query já serve para você simular os resultados. Para preencher um grid, segue o link onde há uma série de exemplos para você consultar. Sugiro utilizar o exemplo com o DataAdapter.
Mais uma coisa: sugiro você ter uma coluna com o Id do usuário nas suas tabelas, pois utilizar strings como chave não é aconselhável. Bom trabalho!
- Editado Rodrigo CdS segunda-feira, 5 de junho de 2017 00:28
- Marcado como Resposta Edson535 quinta-feira, 8 de junho de 2017 14:27
-
-
Boa Noite Rodrigo,
Desde de já obrigado por estar disposto em me ajudar.
É o seguinte fiz o teste aqui, deu certo apenas o seguinte:
Nessa consulta que me passou retorna o total de pontos ganhos (Pontos) e total de pontos dos premios (PontosGastos) por usuário, até aí tudo bem deu certo.
O que faltou foi a criação de uma coluna com o saldo da subtração da coluna Pontos - PontosGastos
Pontos - PontosGastos = SaldoPontos
Atenciosamente,
Edson
-
Boa Noite Rodrigo,
Desde de já obrigado por estar disposto em me ajudar.
É o seguinte fiz o teste aqui, deu certo apenas o seguinte:
Nessa consulta que me passou retorna o total de pontos ganhos (Pontos) e total de pontos dos premios (PontosGastos) por usuário, até aí tudo bem deu certo.
O que faltou foi a criação de uma coluna com o saldo da subtração da coluna Pontos - PontosGastos
Pontos - PontosGastos = SaldoPontos
Atenciosamente,
Edson
Segue:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos , sum(Pontuacao.pontos) - Premio.Pontos as SaldoPontos from @Pontuacao as Pontuacao cross apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
- Marcado como Resposta Edson535 quinta-feira, 8 de junho de 2017 14:27
-
Bom dia Rodrigo,
Mais uma vez muito obrigado!
Estou estudando umas vídeo aulas pelo youtube, canal João Ribeiro, muito interessante o conteúdo, C# e SQL, muito bem explanado, são 200 vídeo aulas.
Se você tiver alguns conteúdos interessantes pra me passar eu agradeço.
Aliás, estou aprendendo com você também.
Valeu brother, paz, alegria e muito sucesso pra você e sua família, fica com Deus.
Atenciosamente,
Edson
- Editado Edson535 quinta-feira, 8 de junho de 2017 14:34
-
Boa Noite Rodrigo,
Deu certo essa consulta, mas tem um outro detalhe, o resultado que aparece é esse:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Mas gostaria que esse Select mostrasse também os Usuarios que que não resgatou nada, por exemplo, ficaria assim:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Anna 5000 5000
Marcelo 3000 3000
Marcos 1400 400 1000
Marcia 500 200 300
Adriano 4200 4200
Entendeu?
desde Já Agradeço
Edson
-
Boa Noite Rodrigo,
Deu certo essa consulta, mas tem um outro detalhe, o resultado que aparece é esse:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Mas gostaria que esse Select mostrasse também os Usuarios que que não resgatou nada, por exemplo, ficaria assim:
Usuario Pontos PontosGastos SaldoPontos
Joao 2000 1500 500
Maria 3000 2000 1000
Eder 2000 1200 8000
Anna 5000 5000
Marcelo 3000 3000
Marcos 1400 400 1000
Marcia 500 200 300
Adriano 4200 4200
Entendeu?
desde Já Agradeço
Edson
Tenta isto:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , isnull(Premio.Pontos, 0) as PontosGastos , sum(Pontuacao.pontos) - isnull(Premio.Pontos, 0) as SaldoPontos from @Pontuacao as Pontuacao outer apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
Bom trabalho!
- Marcado como Resposta Edson535 sexta-feira, 9 de junho de 2017 13:51
-
-
Boa Tarde Rodrigo
A consulta deu certo.
Mais um detalhe
Nessa consulta eu consigo carregar o datagridview:
VotarBoa Noite Rodrigo,
Desde de já obrigado por estar disposto em me ajudar.
É o seguinte fiz o teste aqui, deu certo apenas o seguinte:
Nessa consulta que me passou retorna o total de pontos ganhos (Pontos) e total de pontos dos premios (PontosGastos) por usuário, até aí tudo bem deu certo.
O que faltou foi a criação de uma coluna com o saldo da subtração da coluna Pontos - PontosGastos
Pontos - PontosGastos = SaldoPontos
Atenciosamente,
Edson
Segue:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos , sum(Pontuacao.pontos) - Premio.Pontos as SaldoPontos from @Pontuacao as Pontuacao cross apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
-
Já nessa da um erro
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , isnull(Premio.Pontos, 0) as PontosGastos , sum(Pontuacao.pontos) - isnull(Premio.Pontos, 0) as SaldoPontos from @Pontuacao as Pontuacao outer apply ( select Premio.usuario , sum(Premio.pts_pontos) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
-
Esse é código que estou usando pra carregar o DataGridView:
Essa consulta da certo, carrega o Datagridview.
Já se eu trocar essa consulta pela outra com o parametro isnull dá o erro.
private void carregarGrid()
{
var sqlCeDataAdapter = new SqlCeDataAdapter("SELECT Pontuacao.Cpf, sum(Pontuacao.Pontuacao) as Pontos, Resgate.Pontos as PontosGastos,sum(Pontuacao.Pontuacao) - Resgate.Pontos as SaldoPontos from Pontuacao as Pontuacao cross apply (select Resgate.Usuario, sum(Resgate.Pontos) as Pontos from Resgate as Resgate where UPPER(Resgate.Usuario) = UPPER(Pontuacao.Cpf) group by Resgate.Usuario) as Resgate group by Pontuacao.Cpf, Resgate.Pontos", @"Data Source=C:\Users\Terminal5\documents\visual studio 2012\Projects\Responda\Responda\Pontos.sdf;Persist Security Info=True");
var sqlCeCommandBuilder = new SqlCeCommandBuilder(sqlCeDataAdapter);
var dataTable = new DataTable();
sqlCeDataAdapter.Fill(dataTable);
var bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
this.dataGridView1.DefaultCellStyle.Font = new Font("Tahoma", 16);
this.dataGridView1.DefaultCellStyle.ForeColor = Color.DarkSlateGray;
dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
}Me desculpa pelo código, como estou fazendo testes não me preocupei em identar o código, apenas pra ver o resultado.
-
-
Fiz esse procedimento, mas continua não carregado o datagridview
A consulta funciona perfeitamente, me trás os resultados que eu preciso, só não consigo carregar essa consulta num DataGridView.
Atenciosamente,
Edson
- Editado Edson535 sexta-feira, 9 de junho de 2017 20:39
-
Fiz esse procedimento, mas continua não carregado o datagridview
A consulta funciona perfeitamente, me trás os resultados que eu preciso, só não consigo carregar essa consulta num DataGridView.
Atenciosamente,
Edson
- Marcado como Resposta Edson535 sábado, 10 de junho de 2017 14:52
-
Fiz esse procedimento, mas continua não carregado o datagridview
A consulta funciona perfeitamente, me trás os resultados que eu preciso, só não consigo carregar essa consulta num DataGridView.
Atenciosamente,
Edson
A princípio está tudo certo na codificação. Você viu que a consulta traz os valores corretamente ao debugar o fonte? Se sim, você verificou se o dataTable está preenchido? Pelo que pude verificar do código, se a consulta está retornando o resultado, deveria preencher o grid, a não ser que você tenha algum outro método que é executado depois deste que reseta o datasource.O erro que dá é nessa inha do código:
sqlCeDataAdapter.Fill(dataTable);
O interessante é que na consulta sem o atributo isnull ou coalesce carrega o datagridview certinho, já se eu colocar esse atributo não carrega e dá esse erro.
Atenciosamente,
Edson
-
Tenta um destes:
select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos , sum(Pontuacao.pontos) - Premio.Pontos as SaldoPontos from @Pontuacao as Pontuacao outer apply ( select Premio.usuario , isnull(sum(Premio.pts_pontos), 0) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos select Pontuacao.usuario , sum(Pontuacao.pontos) as Pontos , Premio.Pontos as PontosGastos , sum(Pontuacao.pontos) - Premio.Pontos as SaldoPontos from @Pontuacao as Pontuacao outer apply ( select Premio.usuario , sum(case when (Premio.pts_pontos = null) then 0 else Premio.pts_pontos end) as Pontos from @Premio as Premio where UPPER(Premio.usuario) = UPPER(Pontuacao.usuario) group by Premio.usuario ) as Premio group by Pontuacao.usuario , Premio.Pontos
Realmente não deveria da erro. Se acontecer erro novamente, por favor, envia uma imagem com a mensagem de erro no momento do debug.
-