Usuário com melhor resposta
LostFocus

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
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
Todas as Respostas
-
-
É 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.
-
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
-
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
-
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