Validar Registro Antes de Salvar
Olá, fiz este código para validar o registro antes de ser salvo, está funcionando para registros novos, mas se faço alteração em um registro já existente, bloqueia dizendo que já existe...
Como posso resolver isto ?
Windows Form C#.
Código :
Chamo o método no botão Salvar :
Como posso resolver isto ?
Windows Form C#.
Código :
void ValidarRegistro(string nome, string endereco) OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); conexao.Open(); OleDbCommand Comando = new OleDbCommand("SELECT Nome, Endereco From Locatario WHERE Nome = nome and Endereco = endereco", conexao); OleDbDataReader reader = null; reader = comando.ExecuteReader(); try { if (reader.Read()) { string leitura1 = reader["Nome"].ToString(); string leitura2 = reader["Endereco"].ToString(); throw new Exception("Nome ou Endereço já Cadastrados !"); } catch (OleDbException exp) { exp.Message.ToString(); } finally } conexao.Close(); reader.Close(); }
Chamo o método no botão Salvar :
private void BtnSalvar_Click(object sender, EventArgs e) { ValidarRegistro(nome,endereco); { try { if (nomeTextBox.Text != "") { this.Validate(); this.locatarioBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.bDBiblioteca2DataSet);
Jair Souza
Curtidas 0
Respostas
Joel Rodrigues
10/04/2014
Mas se foi assim que você definiu, o que você esperava? Tem ali um throw se a consulta retornar registros, então se o endereço já existir, vai rodar aquele throw.
GOSTEI 0
Jair Souza
10/04/2014
Digamos que o João da Silva, já cadastrado com endereço X, muda qualquer outro dado do seu cadastro, não consigo alterar...
Está faltando algo, mas não consegui identificar...
Está faltando algo, mas não consegui identificar...
GOSTEI 0
Mateus Moraes
10/04/2014
Comenta essa linha
que vai funcionar
throw new Exception("Nome ou Endereço já Cadastrados !");
que vai funcionar
GOSTEI 0
Jair Souza
10/04/2014
Me desculpe, é o meu primeiro projeto, como assim Comenta ?
GOSTEI 0
Pjava
10/04/2014
Assim:
Ou remova-a. Eu faria isso. Código que não funciona, deve ser removido e não comentado. Comentário assim é lixo. Na minha empresa já teria levado um esculacho daqueles ao comentar código que não serão usados. Comentários somente a nível de informação.
//throw new Exception("Nome ou Endereço já Cadastrados !");
Ou remova-a. Eu faria isso. Código que não funciona, deve ser removido e não comentado. Comentário assim é lixo. Na minha empresa já teria levado um esculacho daqueles ao comentar código que não serão usados. Comentários somente a nível de informação.
GOSTEI 0
Jair Souza
10/04/2014
Concordo plenamente, por isso não entendi "Comenta essa linha", hehehe
Mas sem esta linha não vou ser avisado, quando houver um registro com o "nome" e "endereço" já cadastrados...
Mas sem esta linha não vou ser avisado, quando houver um registro com o "nome" e "endereço" já cadastrados...
GOSTEI 0
Mateus Moraes
10/04/2014
Assim:
Ou remova-a. Eu faria isso. Código que não funciona, deve ser removido e não comentado. Comentário assim é lixo. Na minha empresa já teria levado um esculacho daqueles ao comentar código que não serão usados. Comentários somente a nível de informação.
//throw new Exception("Nome ou Endereço já Cadastrados !");
Ou remova-a. Eu faria isso. Código que não funciona, deve ser removido e não comentado. Comentário assim é lixo. Na minha empresa já teria levado um esculacho daqueles ao comentar código que não serão usados. Comentários somente a nível de informação.
Para bom entendedor comenta funcionou remova simples assim.
GOSTEI 0
Jair Souza
10/04/2014
Você tem toda razão, não fui um bom entendedor, apareceram outros erros, estou verificando...
GOSTEI 0
Mateus Moraes
10/04/2014
Seguinte,
Se a condição entrar dentro do seu quer dizer que já existe dessa forma você não precisa lançar uma exceção na sua aplicação, trate como regra de negocio simples.
Se a condição entrar dentro do seu
if (reader.Read())
GOSTEI 0
Jair Souza
10/04/2014
Olá, estou retomando esta parte do projeto...e agora depois alguns ajustes está funcionando, mas somente para o PRIMEIRO registro, do segundo em diante não.
O que está errado, que ele não faz a validação do segundo em diante...está deixando salvar mesmo sendo um nome já existente no banco...
O que está errado, que ele não faz a validação do segundo em diante...está deixando salvar mesmo sendo um nome já existente no banco...
private void BtnSalvar_Click(object sender, EventArgs e) { tabControl1.Focus(); Restaura_Cor_textBox(); OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb"); conexao.Open(); OleDbCommand comando = new OleDbCommand("SELECT Nome From Funcionario", conexao); OleDbDataReader reader = null; reader = comando.ExecuteReader(); if (reader.Read()) { string leitura1 = reader["Nome"].ToString(); conexao.Close(); reader.Close(); try { if ((BtnAlterar.Checked == true) || ((leitura1 != nomeTextBox.Text) && (senhaTextBox.Text == ConfSenhatextbox.Text))) { this.Validate(); this.funcionarioBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.bDBibliotecaDataSet); MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information); NoMoveReg(); DesabilitaCampos(); this.tabControl1.TabPages.Add(this.tabPage2); ConfSenhatextbox.ForeColor = Color.Black; } if (senhaTextBox.Text != ConfSenhatextbox.Text) { MessageBox.Show("Senhas não são Iguais !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); ConfSenhatextbox.ForeColor = Color.Red; ConfSenhatextbox.Focus(); } if ((leitura1 == nomeTextBox.Text) && (BtnAlterar.Checked == false)) { MessageBox.Show("Nome já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); nomeTextBox.Focus(); } } catch (Exception ex) { MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); DesabilitaCampos(); } BtnPrimeiro.Enabled = true; BtnAnterior.Enabled = true; TBRegAtual.Enabled = true; BtnProximo.Enabled = true; BtnUltimo.Enabled = true; BtnAtualizar.Enabled = true; BtnExcluir.Enabled = true; textBox1.Text = ""; } }
GOSTEI 0
Jair Souza
10/04/2014
E aí pessoal, fiz alguns ajustes no código, e funciona perfeitamente, mas somente com o primeiro registro do BD...não tem jeito...esgotei as minhas tentativas, preciso de ajuda .
private void BtnSalvar_Click(object sender, EventArgs e) { tabControl1.Focus(); Restaura_Cor_textBox(); try { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb"); OleDbCommand comando = new OleDbCommand("SELECT Nome,Login From Funcionario", conexao); conexao.Open(); OleDbDataReader reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if (reader.HasRows) { if (reader.Read()) { string leitura1 = reader["Nome"].ToString(); string leitura2 = reader["Login"].ToString(); if ((BtnAlterar.Checked == true) || (leitura1 != nomeTextBox.Text) && (leitura2 != loginTextBox.Text) && (senhaTextBox.Text == ConfSenhatextbox.Text)) { this.Validate(); this.funcionarioBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.bDBibliotecaDataSet); MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information); NoMoveReg(); DesabilitaCampos(); this.tabControl1.TabPages.Add(this.tabPage2); ConfSenhatextbox.ForeColor = Color.Black; } if (senhaTextBox.Text != ConfSenhatextbox.Text) { MessageBox.Show("Senhas não são Iguais !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); ConfSenhatextbox.ForeColor = Color.Red; ConfSenhatextbox.Focus(); } if ((BtnAlterar.Checked == false) && (leitura1 == nomeTextBox.Text)) { MessageBox.Show("Nome já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); nomeTextBox.Focus(); } if ((BtnAlterar.Checked == false) && (leitura2 == loginTextBox.Text)) { MessageBox.Show("Login já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); loginTextBox.Focus(); } } catch (Exception ex) { MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); this.tabControl1.TabPages.Add(this.tabPage2); DesabilitaCampos(); NoMoveReg(); } BtnPrimeiro.Enabled = true; BtnAnterior.Enabled = true; TBRegAtual.Enabled = true; BtnProximo.Enabled = true; BtnUltimo.Enabled = true; BtnAtualizar.Enabled = true; BtnExcluir.Enabled = true; textBox1.Text = ""; BtnAlterar.Checked = false; } reader.Close(); } }
GOSTEI 0
Jair Souza
10/04/2014
Coloquei um messagebox para ver o que carrega na variavel "leitura" e sempre vem somente o primeiro registro, a primeira linha do grid.
private void BtnSalvar_Click(object sender, EventArgs e) { try { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb"); OleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario", conexao); conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); { if (reader.HasRows) { if (reader.Read()) { string leitura1 = reader["Nome"].ToString(); string leitura2 = reader["Login"].ToString(); MessageBox.Show(leitura1); MessageBox.Show(leitura2);
GOSTEI 0
Jair Souza
10/04/2014
Resolvido ficou assim :
Mas quero melhorar, informando especificamente quando é o Nome que já existe ou quando é o Login que já existe.
private void BtnSalvar_Click(object sender, EventArgs e) { try { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb"); OleDbCommand comando = new OleDbCommand("SELECT Nome, Login FROM Funcionario WHERE Nome = @nome OR Login = @login", conexao); comando.Parameters.AddWithValue("@nome", nomeTextBox.Text); comando.Parameters.AddWithValue("@login", loginTextBox.Text); conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if ((reader.HasRows) && (reader.Read())) //se leitor tem linhas e se leitor leu. { MessageBox.Show("Nome ou Login já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); nomeTextBox.Focus(); nomeTextBox.ForeColor = Color.Red; loginTextBox.ForeColor = Color.Red; } else if (senhaTextBox.Text != ConfSenhatextbox.Text) { MessageBox.Show("Senhas não são Iguais !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); ConfSenhatextbox.Focus(); ConfSenhatextbox.ForeColor = Color.Red; } else { this.Validate(); this.funcionarioBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.bDBibliotecaDataSet); MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information); } reader.Close(); } catch (Exception ex) { MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Mas quero melhorar, informando especificamente quando é o Nome que já existe ou quando é o Login que já existe.
GOSTEI 0
Jair Souza
10/04/2014
Mas quero melhorar, informando especificamente quando é o Nome que já existe ou quando é o Login que já existe.
Como fazer isto baseado no código que já tenho ?
Como fazer isto baseado no código que já tenho ?
GOSTEI 0
Jair Souza
10/04/2014
E aí pessoal, alguma dica ?
GOSTEI 0
Jair Souza
10/04/2014
Ainda não consegui...
GOSTEI 0
Jair Souza
10/04/2014
Agora consegui, ficou assim :
private void BtnSalvar_Click(object sender, EventArgs e) { try { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb"); OleDbCommand comando = new OleDbCommand("SELECT Nome , Login FROM Funcionario WHERE Nome = @nome OR Login = @login", conexao); comando.Parameters.AddWithValue("@nome", nomeTextBox.Text); comando.Parameters.AddWithValue("@login", loginTextBox.Text); conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if ((reader.HasRows) && (reader.Read()) && (BtnAdicionar.Checked == true)) { if (nomeTextBox.Text == reader["nome"].ToString()) { MessageBox.Show("Nome já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); nomeTextBox.Focus(); nomeTextBox.ForeColor = Color.Red; loginTextBox.ForeColor = Color.Black; } else if (loginTextBox.Text == reader["login"].ToString()) { MessageBox.Show("Login já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); loginTextBox.Focus(); loginTextBox.ForeColor = Color.Red; nomeTextBox.ForeColor = Color.Black; } } else if (senhaTextBox.Text != ConfSenhatextbox.Text) { MessageBox.Show("Senhas não são Iguais !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); ConfSenhatextbox.Focus(); ConfSenhatextbox.ForeColor = Color.Red; } else { this.Validate(); this.funcionarioBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.bDBibliotecaDataSet); MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information); } reader.Close(); } catch (Exception ex) { MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); this.tabControl1.TabPages.Add(this.tabPage2); DesabilitaCampos(); Restaura_Cor_textBox(); NoMoveReg(); } }
GOSTEI 0