Jump to content

Identificar erro C#


principiante

Recommended Posts

Ola fez um pequeno programa em c#.Onde tenho uma datagredview para me mostrar os dados da BD access, insiro, altero e procura funciona tudo direitinho. quando clico numa linha da datagredview abre-me outro form para eu poder alterar os dados na BD até ai funciona bem, o problema é quando eu faço uma procura ele faz a procura direitinho mas quando eu clico na linha para abrir o form e alterar os dados dá-me o seguinte erro (  Object reference not set to an instance of an object.  ) este erro só  aparece quando faço a procura. Alguém me pode dar uma ajuda com este erro. Obrigado desde já

Link to comment
Share on other sites

O meu código é este.

    //****************************************************************
            //verifica se o campo de ID da etiqueta esta a ZERO
            //************************************************************
            if (textBoxPROCURA.Text.Length == 0)
            {
                txtinfcat = ("Preenxa o Codigo do Produto antes de fazer a procura .");
                FormINFADICIONAR Falt = new FormINFADICIONAR();// ABRE O FormALTERAÇÃO
                Falt.txtinfcat = txtinfcat;
                Falt.ShowDialog();
                return;
            }
            else
            {
                if (checkb_ID.Checked)
                {
                    //************************************************************
                    //FAZ A PROCURA PELO O ID_DA ETIQUETA
                    //
                    //CRIA A STRING DE CONECÇAO (sqlStrig)
                    criterio = textBoxPROCURA.Text.ToString();
                    string queryString = "SELECT MENSSAGEM,PRODUTO,ID_ETIQUETA,COD_PRODUTO,PREÇO_A,PREÇO_N,DATA FROM ETIQUETAS where ID_ETIQUETA like '%" + criterio + "%'";
                    //VERIFICA SE A sqlString não é nula ou vazia
                    if (queryString != null && queryString != "")
                    carregaGrid(queryString);
                    Conn.Close();
                }
                else
                {
                    //************************************************************
                    //FAZ A PROCURA PELO COD CLIENTE
                    //***********************************************************
                    criterio = textBoxPROCURA.Text.ToString();
                    //CRIA A STRING DE CONECÇAO (sqlStrig)
                    string queryString = "SELECT MENSSAGEM,PRODUTO,ID_ETIQUETA,COD_PRODUTO,PREÇO_A,PREÇO_N,DATA FROM ETIQUETAS where COD_PRODUTO like '%" + criterio + "%'";
                    //VERIFICA SE A sqlString não é nula ou vazia
                    if (queryString != null && queryString != "")
                    carregaGrid(queryString);
                    Conn.Close();
                }
            }
        }
     
        private void carregaGrid(string criterioSQL)
        {
            //define o dataset
            ds = new DataSet();
            //cria uma conexão usando a string de conexão
            Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\TESTE BD\\" + bd);
            try
            {
                //abre a conexao
                Conn.Open();
                if (Conn.State == ConnectionState.Open)
                {
                    da = new OleDbDataAdapter(criterioSQL, Conn);
                    da.Fill(ds, "Tabela");
                    //exibe os dados no datagridview
                    dataGridView1.DataSource = ds;
                    dataGridView1.DataMember = "Tabela";
                }
            }
            catch (System.Exception e)
            {
                txtinfcat = (e.Message.ToString());
                FormINFADICIONAR Falt = new FormINFADICIONAR();// ABRE O FormINFADICIONAR
                Falt.txtinfcat = txtinfcat;
                Falt.ShowDialog();
                return;
            }
        }
Link to comment
Share on other sites

O erro aparece nesta linha.

ID_LINHA = dataGridView1[0, linhaAtual].Value.ToString();

Mas porque é que só me da este erro nesta linha quando faço a procura.Se actualizar os dados não dá este erro e a rutina é a mesma .

ele depois de fazer uma procura eu clico na linha e despara um evento,

esse evento é o mesmo tanto quando quero actualizar a bd como quando faço a procura.só que quando faço a procura ele não me consegue recuperar o (value) diz que esta nula.

Link to comment
Share on other sites

Essa linha aparece aqui no evento da datagredview,que é para me ir buscar os dados da datagredview e coloca-los nas respetivas textbox do form3.Mas o engraçado é que só me da o erro quando faço a procura,e depois clico na linha da datagredview para alterar os dados e ai dá esse erro.

#region Evento Click De Linha Datagredview...

        private void dataGridView1_CellContentDoubleClick_1(object sender, DataGridViewCellEventArgs e)

        {

            try

            {

                //obtem o código do cliente a partir da linha selecionada no datagridview

                linhaAtual = int.Parse(e.RowIndex.ToString());

            }

            catch (Exception ex)

            {

                txtinfcat = ("Erro..." + ex.Message);

                FormINFADICIONAR Falt = new FormINFADICIONAR();// ABRE O FormINFADICIONA

                Falt.txtinfcat = txtinfcat;

                Falt.ShowDialog();

                return;

            }

            if (linhaAtual >= 0)

            {

                //obtem dados do datagridview e atribui as variáveis definidas no formulario f3

                obtemDadosGrid();

                FormALTERAÇÃO f3 = new FormALTERAÇÃO();// ABRE O FormALTERAÇÃO

                //

                f3.ID_LINHA = ID_LINHA;

                f3.MENSSAGEM = MENSSAGEM;

                f3.PREÇO_N = PREÇO_N;

                f3.COD_PRODUTO = COD_PRODUTO;

                f3.PREÇO = PREÇO;

                f3.PRODUTO = PRODUTO;

                f3.ETIQUETA = ETIQUETA;

                //ABRE O FORM ALTERAÇAO

                f3.ShowDialog();

                //atualiza o grid

                dataGridView1.Update();

                iniciaAcesso();

            }

        }

       

        private void obtemDadosGrid()

        {

            //******************************************************************************

            //a primeira coluna é a coluna 0 a segunda é a coluna 1 , e , assim por diante

            //*******************************************************************************

            //

            ID_LINHA = dataGridView1[0, linhaAtual].Value.ToString();

            MENSSAGEM = dataGridView1[1, linhaAtual].Value.ToString();

            PRODUTO = dataGridView1[2, linhaAtual].Value.ToString();

            ETIQUETA = dataGridView1[3, linhaAtual].Value.ToString();

            COD_PRODUTO = dataGridView1[4, linhaAtual].Value.ToString();

            PREÇO = dataGridView1[5, linhaAtual].Value.ToString();

            PREÇO_N = dataGridView1[6, linhaAtual].Value.ToString();

        }

        #endregion
Link to comment
Share on other sites

Já esta resolvido obrigado a todos.o problema estava aqui.

Errado.

string queryString = "SELECT MENSSAGEM,PRODUTO,ID_ETIQUETA,COD_PRODUTO,PREÇO_A,PREÇO_N,DATA FROM ETIQUETAS where COD_PRODUTO like '%" + criterio + "%'";

Correto.

string queryString = "SELECT * FROM ETIQUETAS where COD_PRODUTO like '%" + criterio + "%'";

Link to comment
Share on other sites

Bem eu faço mais ou menos isto:

 public int gravarUtilizador(string nome, string login, string email, DateTime datanasc, string sexo, string password)
    {
        int status = 0;
        SqlConnection objConn = Conexao();

        objConn.Open();
        //   conn = new SqlConnection(abd.strconn);
        // conn.Open();
        SqlCommand cmd;
        try
        {
            //Gerar Passwor~d
            string passwordString = Utilities.CreatePassword(8);
            //MD5
            MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
            byte[] hashedBytes;
            UTF8Encoding encoder = new UTF8Encoding();
            hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(passwordString));

            cmd = new SqlCommand("o004_sp_gravarUtilizador", objConn);
            cmd.Parameters.Add(new SqlParameter("@nome", nome));
            cmd.Parameters.Add(new SqlParameter("@login", login));
            cmd.Parameters.Add(new SqlParameter("@pass", hashedBytes));
            cmd.Parameters.Add(new SqlParameter("@email", email));
            cmd.Parameters.Add(new SqlParameter("@datanasc", datanasc));
            cmd.Parameters.Add(new SqlParameter("@sexo", sexo));
            cmd.CommandType = CommandType.StoredProcedure;

            int a = cmd.ExecuteNonQuery();
            objConn.Close();


        }
        catch
        {
            status = -1;
            objConn.Close();
        }
        return status;
    }

E do outro lado crio um procedimento que recebe (porra isto nao funciona mto bem em ie7, a caixa de texto...)

create proc XXX
@var1 int
@var2 varchar(20)


as begin

select 1 

end
Link to comment
Share on other sites

Ok vou tentar fazer isso obrigado,já agora podias-me dar uma ajuda ,eu queria meter no meu soft um combobox para quando adiciono um novo produto a BD adicionar os produtos por categorias, e quando fizesse a procura antes selecionava uma categoria na combobox ,assim podia fazer a procura por categorias.mas não sei como fazer isso podias-me dar uma ideia como se implementa isso.

Link to comment
Share on other sites

Se cada produto tem uma categoria, passas a categoria para o procedimento, e no procedimento fazes algo do tipo:

select * from Produtos where CategoriaId=@VarRecebida

isto vai retornar um datasource que pode ser uma datatable e depois é so fazer o databind dessa datatable à combobox.datasource...

Penso que respondi à tua pergunta, mas nao tenho a certeza 😄

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.