Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Soares de Almeida

Select Retorna Linha Em Braco No Mysql

Recommended Posts

Caros amigos, gostaria de saber como faço para mandar uma mensagem quando o Select retornar uma linha em branco, de acordo com o creitério selecionado. Tenho o seguinte código no botão Pesquisar:

        private void btnPesquisar_Click(object sender, EventArgs e)
       {
           criterio = txtPesquisaNome.Text.ToString();
           if (criterio != "")
           {
               sqlString = "SELECT * FROM clientes Where cli_Nome LIKE '" + criterio + "%'";
               txtPesquisaNome.Focus();
               this.Close();
           }
           else
           {
               MessageBox.Show("Informe o nome a procurar com pelo menos um caractere.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               txtPesquisaNome.Focus();
           }                
       }

 

Quando eu digito um critério (um nome) que não existe no banco ele está me retornando uma linha em branco. Eu gostaria que me retornasse uma mensagem dizendo que o critério não foi atendido. Abaixo segue o código do formulário Pesquisar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace IpilCompleto.Clientes
{
   public partial class frmPesquisarClientes : Form
   {
       private string criterio = "";
       public string sqlString = "";

       public frmPesquisarClientes()
       {
           InitializeComponent();
       }

       private void btnPesquisar_Click(object sender, EventArgs e)
       {
           criterio = txtPesquisaNome.Text.ToString();
           if (criterio != "")
           {
               sqlString = "SELECT * FROM clientes Where cli_Nome LIKE '" + criterio + "%'";
               txtPesquisaNome.Focus();
               this.Close();
           }
           else
           {
               MessageBox.Show("Informe o nome a procurar com pelo menos um caractere.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               txtPesquisaNome.Focus();
           }                
       }

       private void btnSair_Click(object sender, EventArgs e)
       {
           this.Close();
       }
   }
}

Fico no aguardo de uma solução. Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue um exemplo que pode usar... Esse metodo eu passo data e hora como parametro, e faço a select para saber se ha algum agendamento nesse dia e horário, se tiver, meu objeto reader vai ter linhas (pode ver que pergunto pra ele se tem linhas(HasRows)) e me retornara true, se não houver linhas (não me retornar nada) retorno um false.

 

Com base nisto, chamo o método e se me retornar true, então não posso deixar agendar esse horário e mostro a mensagem para escolher outro horário, senão libero para fazer o agendamento.

 

Partindo dessa idéia da pra você resolver seu problema, faz a select, joga num DataReader, se ela não tiver linhas,você mostra a mensagem que quer...

 

public bool testaDisponibilidade(string data, string hora)
       {
           NpgsqlConnection cn = new NpgsqlConnection();
           try
           {
               cn.ConnectionString = Dados.StringDeConexao;
               NpgsqlDataReader reader;
               NpgsqlCommand cmd = new NpgsqlCommand();
               cmd.Connection = cn;
               cmd.CommandText = "select * from consulta where data ='" + data + "' and hora='" + hora + "'";

               cn.Open();
               reader = cmd.ExecuteReader();

               if (reader.HasRows)
               {
                   return true;
               }
               else
               {
                   return false;
               }
           }
           catch (NpgsqlException ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               cn.Close();
           }
       }

 

Só uma observação

Não precisa fazer criterio = txtPesquisaNome.Text.ToString();

 

pode fazer criterio = txtPesquisaNome.Text;

o conteudo do textbox ja é uma string...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo, continua trazendo as linhas em branco e mostrando no grid. Estou enviando o código do formulário de chamda a pesquisa, ou seja o formulário clientes, conforme abaixo:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace IpilCompleto.Clientes
{
   public partial class frmClientes : Form
   {
       public MySqlConnection Conecta;
       private MySqlDataAdapter da;
       private DataSet ds;
       private int linhaAtual = 0;
       //Variáveis para o campo da tabela clientes
       public string cli_id, cli_nome, cli_endereco, cli_email, cli_tel;
       public frmClientes()
       {
           InitializeComponent();
       }

       private void iniciaAcesso()
       {
           //define o dataset
           ds = new DataSet();
           //cria uma conexão usando a string de conexão
           Conecta = new MySqlConnection("Persist Security Info=False;server=localhost;database=ipil;uid=root;pwd=123456");
           try
           {
               //abre a conexao
               Conecta.Open();
           }
           catch (System.Exception e)
           {
               MessageBox.Show(e.Message.ToString());
           }
           if (Conecta.State == ConnectionState.Open)
           {
               //se a conexão estiver aberta usa uma instrução SQL para selecionar os registros da tabela clientes
               //SELECT campos FROM tabela
               da = new MySqlDataAdapter("SELECT * from clientes", Conecta);
               da.Fill(ds, "Tabela");
               //exibe os dados no datagridview
               dgvDados.DataSource = ds;
               dgvDados.DataMember = "Tabela";
           }
       }

       private void obtemDadosGrid()
       {
          //obtem os dados do datagridview da linha selecionada usando as posições das colunas
          //a primeira coluna é a coluna 0 a segunda é a coluna 1, e assim por diante
          cli_id = dgvDados[0, linhaAtual].Value.ToString();
          cli_nome = dgvDados[1, linhaAtual].Value.ToString();
          cli_endereco = dgvDados[2, linhaAtual].Value.ToString();
          cli_email = dgvDados[3, linhaAtual].Value.ToString();
          cli_tel = dgvDados[4, linhaAtual].Value.ToString();
       }

       private void frmClientes_Load(object sender, EventArgs e)
       {
           //chama rotina para exibir os dados no datagridview
           iniciaAcesso();
       }

       private void btnIncluirCli_Click(object sender, EventArgs e)
       {
           //instancia o formulário para incluir e exibe-o de forma modal
           frmIncluirClientes Cli_Incluir = new frmIncluirClientes();
           Cli_Incluir.ShowDialog();
           iniciaAcesso();
       }

       private void btnAlterarCli_Click(object sender, EventArgs e)
       {
           try
           {
               //obtem o código do cliente a partir da linha selecionada no datagridview
               cli_id = dgvDados[0, linhaAtual].Value.ToString();
           }
           catch (Exception ex)
           {
               MessageBox.Show("Erro..." + ex.Message);
           }
           if (linhaAtual >= 0)
           {
               //obtem dados do datagridview e atribui as variáveis definidas no formulario frmAlterarClientes
               obtemDadosGrid();
               frmAlterarClientes Cli_Alterar = new frmAlterarClientes();
               //
               Cli_Alterar.cli_id = cli_id;
               Cli_Alterar.cli_nome = cli_nome;
               Cli_Alterar.cli_endereco = cli_endereco;
               Cli_Alterar.cli_email = cli_email;
               Cli_Alterar.cli_tel = cli_tel;
               //exibe o formulário para alteração
               Cli_Alterar.ShowDialog();
               //atualiza o grid e reexibe os dados
               dgvDados.Update();
               iniciaAcesso();
           }
       }

       private void btnExcluirCli_Click(object sender, EventArgs e)
       {
           try
           {
               //obtem o código do cliente a partir da linha selecionada no datagridview
               cli_id = dgvDados[0, linhaAtual].Value.ToString();
           }
           catch (Exception ex)
           {
               MessageBox.Show("Erro..." + ex.Message);
           }
           if (linhaAtual >= 0)
           {
               //obtem dados do datagridview e atribui as variáveis definidas no formulario frmExcluirClientes
               obtemDadosGrid();
               frmExcluirClientes Cli_Excluir = new frmExcluirClientes();
               //
               Cli_Excluir.cli_id = cli_id;
               Cli_Excluir.cli_nome = cli_nome;
               Cli_Excluir.cli_endereco = cli_endereco;
               Cli_Excluir.cli_email = cli_email;
               Cli_Excluir.cli_tel = cli_tel;
               //exibe o formulário para exclusão
               Cli_Excluir.ShowDialog();
               //atualiza o grid e reexibe os dados 
               dgvDados.Update();
               iniciaAcesso();
           }
       }

       private void btnProcurarCli_Click(object sender, EventArgs e)
       {
           frmPesquisarClientes Cli_Pesquisar = new frmPesquisarClientes();

           Cli_Pesquisar.ShowDialog();

           if (Cli_Pesquisar.sqlString != null && Cli_Pesquisar.sqlString != "")
               carregaGrid(Cli_Pesquisar.sqlString);
       }

       private void carregaGrid(string criterioSQL)
       {
           //define o dataset
           ds = new DataSet();
           //cria uma conexão usando a string de conexão
           Conecta = new MySqlConnection("Persist Security Info=False;server=localhost;database=ipil;uid=root;pwd=123456");
           try
           {
               //abre a conexao
               Conecta.Open();
           }
           catch (System.Exception e)
           {
               MessageBox.Show(e.Message.ToString());
           }
           if (Conecta.State == ConnectionState.Open)
           {
               //se a conexão estiver aberta usa uma instrução SQL para selecionar os registros da tabela clientes
               //SELECT campos FROM tabela
               da = new MySqlDataAdapter(criterioSQL, Conecta);
               da.Fill(ds, "Tabela");
               //exibe os dados no datagridview
               dgvDados.DataSource = ds;
               dgvDados.DataMember = "Tabela";
           }
       }

       private void btnSairCli_Click(object sender, EventArgs e)
       {
           this.Close();
       }

       private void dgvDados_CellClick(object sender, DataGridViewCellEventArgs e)
       {
           linhaAtual = int.Parse(e.RowIndex.ToString());
       }
    }
}

 

Este é o código do formulário Pesquisar clientes, com a alteração que você recomendou:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace IpilCompleto.Clientes
{
   public partial class frmPesquisarClientes : Form
   {
       public string criterio = "";
       public string sqlString;

       public frmPesquisarClientes()
       {
           InitializeComponent();
       }

       private void btnPesquisar_Click(object sender, EventArgs e)
       {
           criterio = txtPesquisaNome.Text;
           if (criterio != "")
           {
               sqlString = "SELECT * FROM clientes Where cli_Nome LIKE '" + criterio + "%'";
               this.Close();
           }
           else
           {
               MessageBox.Show("Informe o nome a procurar com pelo menos um caractere.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               txtPesquisaNome.Focus();
           }
       }

       public bool VerificaSeBuscaValida(string criterio)
       {
           MySqlConnection sqlString = new MySqlConnection();
           try
           {
               sqlString.ConnectionString = ("Persist Security Info=False;server=localhost;database=ipil;uid=root;pwd=123456");
               MySqlDataReader reader;
               MySqlCommand cmd = new MySqlCommand();
               cmd.Connection = sqlString;
               cmd.CommandText = "SELECT * FROM clientes Where cli_Nome LIKE '" + criterio + "%'";
               sqlString.Open();
               reader = cmd.ExecuteReader();

               if (reader.HasRows)
               {
                   return true;
               }
               else
               {
                   return false;
               }
           }
           catch (MySqlException ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               sqlString.Close();
           }

       }


       private void btnSair_Click(object sender, EventArgs e)
       {
           this.Close();
       }

   }
}

 

Não consigo identificar o erro. Se for possível verificar eu agraderia muito. Fico no aguardo do contato. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.