VB.net - Consulta e bloqueio de campo preenchido
09/10/2014
0
Tenho "trocentos" cadastros a serem feitos, com 10 campos para serem preenchidos, e apenas o primeiro campo não pode ter dados repetidos...
Minha pergunta é: Tem como emitir uma mensagem de que já existe tal dado digitado logo após o campo ser preenchido sem precisar preencher todos os outros 9 campos e clicar em salvar?
Exemplo mais detalhado:
O primeiro campo é Titulo, logo que se digita algum titulo e pressiona-se TAB para ir ao próximo campo , o programa exibe uma mensagem alertando de que esse titulo já existe (limpando o campo e retornando o focus para que seja digitado outro titulo)
Welington
Post mais votado
24/10/2014
Mas respondendo sua dúvida:
1) Após chamar o evento ShowDialog do form 2, você deve setar o foco para o textbox desejado utilizando o método Focus();
2) No Form2, basta usar o comando Close, não precisa chamar o Show do Form1, pois ele já estava visível antes do 2 ser aberto.
Um abraço e bons códigos.
Joel Rodrigues
Mais Posts
10/10/2014
Joel Rodrigues
10/10/2014
Joel Rodrigues
Se você trabalha com dados em sua aplicação, deve saber como fazer um select simples, certo?
10/10/2014
Welington
O projeto está, digamos 90% pronto, os únicos problemas são:
1- Impedir, antes que seja preciso preencher todos os campos do formulário, que o campo Titulo tenha outro igual no banco de dados (caso contrário teria que preencher todos os campos do formulário e clicar em salvar para só então receber uma mensagem de que o titulo já existe! Seria uma perda de tempo e trabalho desnecessário! É justamente isso que quero evitar)
Pensei em usar o LostFocus para que ao pressionar TAB fosse feita a busca no bd para verificar se não existe um titulo igual antes de passar o foco para o próximo campo, mas qual seria o código para executar essa pesquisa através do pressionamento da tecla TAB?
13/10/2014
Jair Souza
14/10/2014
Joel Rodrigues
O exemplo da seção OleDb vai lhe ajudar.
15/10/2014
Jair Souza
private void nometextBox_Leave(object sender, EventArgs e) { try { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb;Jet OLEDB:Database Password = 123"); OleDbCommand comando = new OleDbCommand("SELECT Nome FROM Funcionario WHERE Nome = @nome", conexao); comando.Parameters.AddWithValue("@nome", nomeTextBox.Text); conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if ((reader.HasRows) && (reader.Read()) && (BtnAdicionar.Checked == true)) { if (nomeTextBox.Text == reader["nome"].ToString()) { MessageBox.Show("Nome já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); nomeTextBox.Focus(); nomeTextBox.ForeColor = Color.Red; } } reader.Close(); } } catch (Exception ex) { MessageBox.Show("Não foi Possível Verificar !" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
18/10/2014
Joel Rodrigues
O que você tentou? Vamos tentar corrigir os erros?
20/10/2014
Welington
An unhandled exception of type 'System.NullReferenceException' occurred in Filmographic.exe
Additional information: Referência de objeto não definida para uma instância de um objeto.
Não sei como resolver essa referência não definida, aparentemente ocorre erro com a "ligação/leitura" com o bindingsource!
Criei um módulo fazendo a conexão (que funciona, pois exibe a mensagem de sucesso que coloquei no try)
O erro ocorre no trecho que deveria fazer a consulta: (que também está dentro do módulo da conexão)
Public Sub consulta(ByRef identifica As String)
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "Select Titulo From Tabela1 Where Titulo = " + identifica
Try
dr = cmd.ExecuteReader()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Dentro do leave do textbox Titulo:
Private Sub txtTitulo_Leave(sender As Object, e As EventArgs) Handles txtTitulo.Leave
If txtTitulo.Text <> "" Then
consulta(Me.txtTitulo.Text)
If dr.Read Then
txtTitulo.Text = dr(1).ToString
MsgBox("Titulo já cadastrado!")
End If
End If
dr.Close()
End Sub
20/10/2014
Joel Rodrigues
20/10/2014
Welington
Public cmd As New OleDb.OleDbCommand (Aqui não havia New)
Public dr As OleDb.OleDbDataReader
Ao rodar agora com o New surge essa mensagem de erro:
System.Data.OleDb.OleDbException (0x80040E14): Erro de sintaxe (operador faltando) na expressão de consulta 'Titulo=Coração Valente'
E dentro do leave, aponta essa linha:
If dr.Read then
21/10/2014
Joel Rodrigues
"Select Titulo From Tabela1 Where Titulo = '" + identifica+"'"
21/10/2014
Welington
1º Tenho dois forms, quando passo para o form2 e retorno ao form1 o foco não aparece na textbox que deveria! No load do form1 já está configurado para iniciar com o foco nessa textbox, e funciona, mas não funciona quando retorno do form2 para o from1!
Private Sub btnPesquisar_Click(sender As Object, e As EventArgs) Handles btnPesquisar.Click
Form2.ShowDialog()
End Sub
'código que retorna ao form1
Private Sub btnVoltar_Click(sender As Object, e As EventArgs) Handles btnVoltar.Click
Form1.Show()
Me.Close()
End Sub
2º No form1, tenho além dos campos que criei um bindingnavigator, acontece que ao percorrer os itens pelos botões do bindingnavigator (eles são mostrados nas textbox que criei) mas não aparece o primeiro item cadastrado! No primeiro item cadastrado os campos aparecem em branco, apenas o código aparece! Isso acontece com o primeiro registro cadastrado. No form2 que é para pesquisa há um datagrid onde se mostram os resultados da pesquisa e lá aparece o primeiro registro cadastrado normal?!
Não é exibida nenhuma mensagem de erro! O que pode estar gerando essas duas falhas?
Valeu pela ajuda
Clique aqui para fazer login e interagir na Comunidade :)