none
MessageBox RRS feed

  • Pergunta

  • Bom Dia!

    Tenho o seguinte código no botao de excluir, ele verifica se o registro selecionado para exclusão não está sendo usado em outras tabelas. 

    Está funcionando, mas preciso colocar uma mensagem de erro caso ele queira deletar um registro que esteja sendo usado em outra tabela.

    if (!String.IsNullOrEmpty(Cod))
                    {                  
                                        

                       Command.CommandText = "Delete from NomeAtualVale as NAT where Not Exists(Select * from Cabecalho as C where NAT.Cod_Vale = C.Cod_Vale) and Cod_Vale = " + Cod ;
                            
                    }


    • Editado LetíciaF sexta-feira, 18 de outubro de 2013 13:02
    sexta-feira, 18 de outubro de 2013 12:40

Respostas

  • Eu fiz um exemplo que eu tenho uma tabela TabelaMax e TabelaMaxRelaciona aonde TabelaMax é o Id e na TabelaMaxRelaciona é MaxId que são relacionadas!

    Para não ter problema de voltar um erro do banco não utilize try catch ( só em casos especiais )

    SqlConnection c = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=App;Persist Security Info=True;User ID=sa;Password=senha"); c.Open(); // SQL string Sql = string.Empty; Sql = " DELETE FROM TabelaMax WHERE Id = 2 "; Sql += " AND 1 <> (SELECT TOP 1 COUNT(MaxId) FROM TabelaMaxRelaciona WHERE MaxId = 2)"; // Comando SqlCommand comand = c.CreateCommand(); comand.CommandText = Sql; comand.CommandType = CommandType.Text; if (comand.ExecuteNonQuery() == 0) { // não foi excluido MessageBox.Show(" Item não pode ser excluído pelo relacionado da tabela secundária\n ou \n Não existe ..."); } else { // foi excluido com êxito MessageBox.Show("Item excluído com êxito ..."); } c.Close();

    //Observer os Id = 2 e MaxId = 2 estão em negrito e é por ali que você compara!


    E outro fator se não excluir é igual a Zero se for diferente porque excluiu... 

    Eu não precisei utilizar try catch perceba isso ...


    Fúlvio Cezar Canducci Dias

    sexta-feira, 18 de outubro de 2013 15:24
  • consegui resolver assim:

     string Cod = dtgpesquisanomeempresa.Rows[dtgpesquisanomeempresa.SelectedRows[0].Index].Cells[0].Value.ToString();

                if (MessageBox.Show("Tem Certeza que Deseja Deletar esse Registro?", "Deletar Registro?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    OleDbCommand Command = new OleDbCommand();
                    if (!String.IsNullOrEmpty(Cod))
                    {
                        DataTable dt = db.ExecutarSelect("Select * from NomeAtualVale as NAT inner join Cabecalho as C on C.Cod_Vale = NAT.Cod_Vale");

                        try
                        {
                            if (dt.Rows.Count > 0)
                            {
                                Command.CommandText = ("Delete from NomeAtualVale where Cod_Vale =" + Cod);
                                db.Executar(Command);
                                AtualizarGrid();
                                dtgpesquisanomeempresa.CurrentCell = null;
                                btneditar.Enabled = false;
                                btnexcluir.Enabled = false;
                            }
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Registro Não poderá ser Excluído Pois Está Sendo Utilizado em Outro Cadastro!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            dtgpesquisanomeempresa.CurrentCell = null;
                            btneditar.Enabled = false;
                            btnexcluir.Enabled = false;
                            return;

                        }
                    }
                }

    mas obg pela ajuda!

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 14:25
    terça-feira, 22 de outubro de 2013 12:28

Todas as Respostas

  • Bom dia Leticia, isso poderá lhe ajudar

     try
                {
                    if (!String.IsNullOrEmpty(Cod))
                    {


                        Command.CommandText = "Delete from NomeAtualVale as NAT where Not Exists(Select * from Cabecalho as C where NAT.Cod_Vale = C.Cod_Vale) and Cod_Vale = " + Cod;

                    }
                }
                catch (Exception)
                {
                    // se for windows
                    MessageBox.Show("Não poderá ser Excluido");


                }

    Se a Resposta foi útil, por favor marque como válida assim esta contribuindo para gratificar todo o esforço de nossos colegas, Abraço.


    Paulo Caleffi

    sexta-feira, 18 de outubro de 2013 13:15
  • Paulo não funcionou.
    sexta-feira, 18 de outubro de 2013 13:25
  • Ele entra no try e independente da condição for satisfeita ou nao, ele n entra no catch
    sexta-feira, 18 de outubro de 2013 13:29
  •  private void btnexcluir_Click(object sender, EventArgs e)
            {
                string Cod = dtgpesquisanomeempresa.Rows[dtgpesquisanomeempresa.SelectedRows[0].Index].Cells[0].Value.ToString();

                if (MessageBox.Show("Tem Certeza que Deseja Deletar esse Registro?", "Deletar Registro?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    OleDbCommand Command = new OleDbCommand();

                    try
                    {
                    if (!String.IsNullOrEmpty(Cod))
                    {
                        Command.CommandText = "Delete from NomeAtualVale as NAT where Not Exists(Select * from Cabecalho as C where NAT.Cod_Vale = C.Cod_Vale) and Cod_Vale = " + Cod + "";
                     
                    }
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Registro Não poderá ser Excluido");
                    }

                    db.Executar(Command);

                    AtualizarGrid();
                    dtgpesquisanomeempresa.CurrentCell = null;
                    btneditar.Enabled = false;
                    btnexcluir.Enabled = false;
                }
            }

    tbm n funcionou dessa forma

    sexta-feira, 18 de outubro de 2013 14:24
  • Eu fiz um exemplo que eu tenho uma tabela TabelaMax e TabelaMaxRelaciona aonde TabelaMax é o Id e na TabelaMaxRelaciona é MaxId que são relacionadas!

    Para não ter problema de voltar um erro do banco não utilize try catch ( só em casos especiais )

    SqlConnection c = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=App;Persist Security Info=True;User ID=sa;Password=senha"); c.Open(); // SQL string Sql = string.Empty; Sql = " DELETE FROM TabelaMax WHERE Id = 2 "; Sql += " AND 1 <> (SELECT TOP 1 COUNT(MaxId) FROM TabelaMaxRelaciona WHERE MaxId = 2)"; // Comando SqlCommand comand = c.CreateCommand(); comand.CommandText = Sql; comand.CommandType = CommandType.Text; if (comand.ExecuteNonQuery() == 0) { // não foi excluido MessageBox.Show(" Item não pode ser excluído pelo relacionado da tabela secundária\n ou \n Não existe ..."); } else { // foi excluido com êxito MessageBox.Show("Item excluído com êxito ..."); } c.Close();

    //Observer os Id = 2 e MaxId = 2 estão em negrito e é por ali que você compara!


    E outro fator se não excluir é igual a Zero se for diferente porque excluiu... 

    Eu não precisei utilizar try catch perceba isso ...


    Fúlvio Cezar Canducci Dias

    sexta-feira, 18 de outubro de 2013 15:24
  • eu ja tenho uma classe so pra fazer a conexao com o banco.entao dessa forma fica complicado.
    terça-feira, 22 de outubro de 2013 11:27
  • consegui resolver assim:

     string Cod = dtgpesquisanomeempresa.Rows[dtgpesquisanomeempresa.SelectedRows[0].Index].Cells[0].Value.ToString();

                if (MessageBox.Show("Tem Certeza que Deseja Deletar esse Registro?", "Deletar Registro?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    OleDbCommand Command = new OleDbCommand();
                    if (!String.IsNullOrEmpty(Cod))
                    {
                        DataTable dt = db.ExecutarSelect("Select * from NomeAtualVale as NAT inner join Cabecalho as C on C.Cod_Vale = NAT.Cod_Vale");

                        try
                        {
                            if (dt.Rows.Count > 0)
                            {
                                Command.CommandText = ("Delete from NomeAtualVale where Cod_Vale =" + Cod);
                                db.Executar(Command);
                                AtualizarGrid();
                                dtgpesquisanomeempresa.CurrentCell = null;
                                btneditar.Enabled = false;
                                btnexcluir.Enabled = false;
                            }
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Registro Não poderá ser Excluído Pois Está Sendo Utilizado em Outro Cadastro!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            dtgpesquisanomeempresa.CurrentCell = null;
                            btneditar.Enabled = false;
                            btnexcluir.Enabled = false;
                            return;

                        }
                    }
                }

    mas obg pela ajuda!

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 14:25
    terça-feira, 22 de outubro de 2013 12:28
  • eu ja tenho uma classe so pra fazer a conexao com o banco.entao dessa forma fica complicado.
    Isso foi apenas um exemplo!

    Fúlvio Cezar Canducci Dias

    terça-feira, 22 de outubro de 2013 13:55