Validar Registro Antes de Salvar

10/04/2014

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 :
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

Respostas

10/04/2014

Joel Rodrigues

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.
Responder Citar

10/04/2014

Jair Souza

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...
Responder Citar

10/04/2014

Mateus Pontes

Comenta essa linha

throw new Exception("Nome ou Endereço já Cadastrados !");


que vai funcionar
Responder Citar

10/04/2014

Jair Souza

Me desculpe, é o meu primeiro projeto, como assim Comenta ?
Responder Citar

11/04/2014

Pjava

Assim:

 //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.
Responder Citar

11/04/2014

Jair Souza

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...

Responder Citar

12/04/2014

Mateus Pontes

Assim:
 //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.
Responder Citar

14/04/2014

Jair Souza

Você tem toda razão, não fui um bom entendedor, apareceram outros erros, estou verificando...
Responder Citar

14/04/2014

Mateus Pontes

Seguinte,

Se a condição entrar dentro do seu
if (reader.Read())
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.
Responder Citar

14/05/2014

Jair Souza

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...

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 = "";
}
}
Responder Citar

16/05/2014

Jair Souza

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();
            }
        }



Responder Citar

19/05/2014

Jair Souza

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);
Responder Citar

30/05/2014

Jair Souza

Resolvido 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())) //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.
Responder Citar

30/05/2014

Jair Souza

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 ?
Responder Citar

03/06/2014

Jair Souza

E aí pessoal, alguma dica ?
Responder Citar