none
LostFocus RRS feed

  • Pergunta

  • Bom Dia!

    Pessoal,

    Eu estou fazendo uma consulta em uma tabela no evento lost focus de um textbox e está funcionando perfeitamente, porém, funciona apenas 1 vez, eu coloquei uma pergunta ao usuário, caso seja positiva a consulta é realizada, caso negativa limpa os campos e da um focus na textbox para consultar novamente, mas quando a resposta é nagativa ele não realiza a consulta e não da erro algum, só funciona novamente quando eu fecho o form e abro novamente, segue abaixo o código, caso alguém puder me dar uma luz sobre este problema.

    Desde já agradeço, Obrigado!

    Private Sub TxtCodItem_LostFocus(sender As Object, e As EventArgs) Handles TxtCodItem.LostFocus


            ConnEstoque.Open()

            Dim ComandoConsItem As New MySqlCommand
            ComandoConsItem.CommandText = ("Select * From itens_estoque where coditem = '" & TxtCodItem.Text & "'")

            ComandoConsItem.CommandType = CommandType.Text
            ComandoConsItem.Connection = ConnEstoque
            Dim DRItem As MySqlDataReader
            Dim DTItem As DataTable = New DataTable

            DRItem = ComandoConsItem.ExecuteReader

            DRItem.Read()


            If DRItem(0) = TxtCodItem.Text Then
                If MessageBox.Show("Este item já está cadastrado, você deseja utilizar os dados de cadastro deste item?", "Edição de item", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                    MessageBox.Show("ATENÇÂO: O código do item é inalterável, pois o código continuará o mesmo, porém, sua quantidade e numero de nota fiscal deverão ser alterados", "AVISO IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    TxtDenItem.Text = DRItem(1)
                    TxtQuantidade.Text = DRItem(3)
                    CboUnidMedida.Text = DRItem(2)
                    CboCliente.Text = DRItem(6)
                    CboFornecedor.Text = DRItem(7)
                    TxtObservacao.Text = DRItem(8)
                    BtnAlterar.Enabled = True
                    BtnSalvar.Enabled = False
                Else
                    'Limpa todos os campos do formulário FrmEstoque caso o usuário não for utilizar os dados
                    TxtCodItem.Text = ""
                    TxtDenItem.Text = ""
                    TxtQuantidade.Text = ""
                    CboUnidMedida.Text = ""
                    MskDataEntrada.Mask = ""
                    MskDataEntrada.Text = ""
                    MskDataEntrada.Mask = "##-##-####"
                    MskHoraEntrada.Mask = ""
                    MskHoraEntrada.Text = ""
                    MskHoraEntrada.Mask = "##:##"
                    CboCliente.Text = ""
                    CboFornecedor.Text = ""
                    TxtNF.Text = ""
                    TxtObservacao.Text = ""
                    TxtCodItem.Focus()

                    'exibe a data atual na masked
                    MskDataEntrada.Text = Now

                    Dim Hora As DateTime = DateTime.Now
                    Dim Agora = Hora.ToString("T")

                    MskHoraEntrada.Text = Agora

                End If

            End If
            ConnEstoque.Close()
        End Sub

    quarta-feira, 14 de outubro de 2015 14:46

Respostas

  • Esta gerar erro na conecao porque voce usa Datareader...

    Porque voce usa DataTable e Datareader ao mesmo tempo:

     Dim DRItem As MySqlDataReader

     Dim DTItem As DataTable = New DataTable?

    O k voce precisa, e criar um metodo que retorna a pesquiza, depois pega este metodo e analize.


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ segunda-feira, 19 de outubro de 2015 13:59
    sábado, 17 de outubro de 2015 12:25
    Moderador

Todas as Respostas

  • O teu codigo esta confuso cara....

    o que voce quer fazer?


    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 14 de outubro de 2015 15:39
    Moderador
  • É o seguinte:

    Eu coloquei uma consulta no evento lostfocus de uma textbox, quando o usuário digitar o código do item a ser cadastrado e pular (o foco sair da textbox código do item) para o próximo campo a consulta verifica se já existe aquele código na tabela, caso já exista, uma mensagem é exibida informando que o código já existe e perguntando para o usuário se ele quer utilizar os dados para atualizar o cadastro (clicar em sim) ou não, caso ele clique em sim, ele digita a quantidade do item e o numero da nota fiscal, caso ele clique em não, os campos são limpos, o foco volta para o campo código e ele digita um novo e assim todo o passo acima se repete.

    Tudo funciona belezinha, mas apenas uma vez, pois se eu continuar e concluir o cadastro ou clicar em não, os campos são limpos o foco volta para o campo código do item, mas a consulta não funciona mais e nem da erro nenhum, como se o botão estivesse vazio, sem código. O estranho é que eu coloco um msgbox la no meio do código e ele funciona, mas a consulta não.

    O que não entendi é porque funciona só na primeira consulta, as demais não funciona.

    Obs: se eu fechar o formulário e abrir novamente a consulta funciona, se eu digitar um código já existente na tabela na segunda consulta ele não traz nada e não da erro.

    quarta-feira, 14 de outubro de 2015 17:39
  • OI amigo boa tarde que mensagem vc se refere ? essa ?

        If MessageBox.Show("Este item já está cadastrado, você deseja utilizar os dados de cadastro deste item?", "Edição de item", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then

     
    quarta-feira, 14 de outubro de 2015 19:38
  • A fonte está muito pequena no post anterior, segue com a fonte maior.

    Talvez com o código assim fica mais fácil de entender, é apenas uma consulta no banco com algumas condições, porém, está dando erro vde conexão já aberta, eu comento a abertura da conexão mas na próxima consulta da erro porque está fechada, enfim, eu devo estar abrindo ou fechando a conexão no lugar errado.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            'abrindo a conexão

            ConnEstoque.Open()

            Dim ComandoConsItem As New MySqlCommand

            ComandoConsItem.CommandText = ("Select * From itens_estoque where coditem = '" & TxtCodItem.Text & "'")

            ComandoConsItem.CommandType = CommandType.Text

            ComandoConsItem.Connection = ConnEstoque

            Dim DRItem As MySqlDataReader

            Dim DTItem As DataTable = New DataTable

            DRItem = ComandoConsItem.ExecuteReader

            DRItem.Read()

            QtdeEstoque = DRItem(3)

            If DRItem(0) = TxtCodItem.Text Then

                If MessageBox.Show("Este item já está cadastrado, você deseja utilizar os dados de cadastro deste item?", "Edição de item", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then

                    MessageBox.Show("ATENÇÂO: O código do item é inalterável, pois o código continuará o mesmo, porém, sua quantidade e numero de nota fiscal deverão ser alterados", "AVISO IMPORTANTE", MessageBoxButtons.OK, MessageBoxIcon.Information)

                    TxtDenItem.Text = DRItem(1)

                    TxtQuantidade.Text = DRItem(3)

                    CboUnidMedida.Text = DRItem(2)

                    CboCliente.Text = DRItem(6)

                    CboFornecedor.Text = DRItem(7)

                    TxtObservacao.Text = DRItem(8)

                    BtnAlterar.Enabled = True

                    BtnSalvar.Enabled = False

                    DRItem.Close()

                Else

                    'Limpa todos os campos do formulário FrmEstoque caso o usuário não for utilizar os dados

                    TxtCodItem.Text = ""

                    TxtDenItem.Text = ""

                    TxtQuantidade.Text = ""

                    CboUnidMedida.Text = ""

                    MskDataEntrada.Mask = ""

                    MskDataEntrada.Text = ""

                    MskDataEntrada.Mask = "##-##-####"

                    MskHoraEntrada.Mask = ""

                    MskHoraEntrada.Text = ""

                    MskHoraEntrada.Mask = "##:##"

                    CboCliente.Text = ""

                    CboFornecedor.Text = ""

                    TxtNF.Text = ""

                    TxtObservacao.Text = ""

                    TxtCodItem.Focus()

                    'exibe a data atual na masked

                    MskDataEntrada.Text = Now

                    Dim Hora As DateTime = DateTime.Now

                    Dim Agora = Hora.ToString("T")

                    MskHoraEntrada.Text = Agora

                    ConnEstoque.Close()

                End If

            End If

        End Sub

    quinta-feira, 15 de outubro de 2015 13:18
  • Esta gerar erro na conecao porque voce usa Datareader...

    Porque voce usa DataTable e Datareader ao mesmo tempo:

     Dim DRItem As MySqlDataReader

     Dim DTItem As DataTable = New DataTable?

    O k voce precisa, e criar um metodo que retorna a pesquiza, depois pega este metodo e analize.


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ segunda-feira, 19 de outubro de 2015 13:59
    sábado, 17 de outubro de 2015 12:25
    Moderador