Usuário com melhor resposta
Banco de dados

Pergunta
-
Olá amigos do MSDN, continuo tentando dar agora um segundo passo no entendimento de banco de dados. Consegui copiando, montar uma ultra simples tabela.
Tenho essa configuração:
Imports System.Data.OleDb
Public Class Class1
Private dbcon As New OleDbConnection("Provider = microsoft.ace.OLEDB.12.0 ; DATA SOURCE = D:\WindowsApplication1\WindowsApplication1\nomes.accdb")
Private DBCmd As OleDbCommand
Private DBDA As OleDbDataAdapterPublic dbdt As DataTablePublic Sub executquery(ByVal query As String)
Trydbcon.Open()
DBCmd = New OleDbCommand(query, dbcon)
dbdt = New DataTableDBDA = New OleDbDataAdapter(DBCmd)
DBDA.Fill(dbdt)Catch ex As Exception
MessageBox.Show("deu bo")End TryEnd Sub
End ClassPublic Class Form1
Private dados As New Class1
Private Sub form1_shown(sender As Object, e As EventArgs) Handles Me.Showndados.executquery("select * from tabela1")
grid.DataSource = dados.dbdtEnd SubA minha intenção é montar a seguinte rotina, usando 1 TextBox no Form, e através desse TextBox quero ir populando o meu banco de dados. Seria algo do tipo, ao colocar um nome no TextBox, automaticamente o programa pesquisaria na tabela do banco de dados se aquele nome já existe, então se o nome já existe, o TextBox fica com o nome escrito, se o nome ainda não consta na tabela, então o programa automaticamente cadastraria este novo nome que passaria afazer parte do banco de dados.
Tenho uma rotina que faz isso, só que não trabalha com banco de dados, os nomes fazem parte da rotina e portanto não existe um cadastro para gravar os novos nomes. A rotina é essa:
'função que auto-completa os nomes
Dim lst As New List(Of String)
Dim MySource As New AutoCompleteStringCollection()Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim nomesMatriz = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28}
lst.Add("Abrãao")lst.Add("Alceu")
lst.Add("Alencar")
lst.Add("Bernardo")lst.Add("Carlos")
lst.Add("Gustavo")
lst.Add("Renato")
lst.Add("Sueli")
MySource.AddRange(lst.ToArray)For u = 0 To 27
nomesMatriz(u).AutoCompleteCustomSource = MySource
NextFor u = 0 To 27
nomesMatriz(u).AutoCompleteMode = AutoCompleteMode.SuggestAppend
NextFor u = 0 To 27
nomesMatriz(u).AutoCompleteSource = AutoCompleteSource.CustomSource
NextEnd SubEnd Class
Quero que o meu banco de dados funcione como nessa rotina, quando entro com a primeira letra do nome, surge uma coluna com todos os nomes que começam com aquela letra.
Acredito que para quem conhece sobre banco de dados isso seja muito simples, mas ainda não tenho a menor ideia como fazer essa pequena rotina, alguém pode me dar essa força?
Grato / Durval
sexta-feira, 6 de abril de 2018 22:02
Respostas
-
Durval Teixeira,
OKay, consegui simular seu código aqui e funcionou.
- Vamos organizar as ideias:
1 - Ler o banco de dados e preencher TODOS os TextBox com o recurso "AutoCompleteCustomSource";
2 - Criar um botão "Inserir" que irá fazer o "INSERT";
3 - Disparar uma rotina de "checagem". Essa rotina verificará se o conteúdo do "AutoCompleteCustomSource" JÁ POSSUI o nome na lista;
3.1 - Caso NÃO exista o nome na lista, então disparará o código abaixo "InsertRow";
3.2 - Caso exista o nome na lista, então NÃO disparará o código abaixo "InsertRow";Public Sub InsertRow(ByVal connectionString As String, ByVal insertSQL As String) Using connection As New OleDbConnection(connectionString) ' The insertSQL string contains a SQL statement that ' inserts a new row in the source table. Dim command As New OleDbCommand(insertSQL) ' Set the Connection to the new OleDbConnection. command.Connection = connection ' Open the connection and execute the insert command. Try connection.Open() command.ExecuteNonQuery() Catch ex As Exception MessageBox.Show("deu erro") End Try ' The connection is automatically closed when the ' code exits the Using block. End Using
End Sub
Para o botão...
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\WindowsApplication1\WindowsApplication1\nomes.accdb;Persist Security Info=False;" Dim strSQL = "INSERT INTO Tabela1 ( Codigo, Nome )" 'Modifique de acordo com a sua tabela no Access
If Not TextBox1.AutoCompleteCustomSource.Contains(TextBox1.Text) Then
dados.InsertRow(strSQL, strCon)
End IfEnd Sub
Coloquei a rotina "InsertRow" dentro da sua classe "dados";
É isso?
[]'s,
Fabio I.- Editado Fabio I segunda-feira, 9 de abril de 2018 12:20
- Marcado como Resposta Durval Teixeira quarta-feira, 11 de abril de 2018 01:00
segunda-feira, 9 de abril de 2018 12:13
Todas as Respostas
-
Durval Teixeira,
Acho que é isso que você procura:
Existe dentro das propriedades do Textbox em VB.Net uma propriedade chamada "AutoComplete". Veja um exemplo:
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Create the list to use as the custom source. Dim MySource As New AutoCompleteStringCollection() MySource.AddRange(New String() _ { _ "January", _ "February", _ "March", _ "April", _ "May", _ "June", _ "July", _ "August", _ "September", _ "October", _ "November", _ "December" _ }) ' Create and initialize the text box. Dim MyTextBox As New TextBox() With MyTextBox .AutoCompleteCustomSource = MySource .AutoCompleteMode = AutoCompleteMode.SuggestAppend .AutoCompleteSource = AutoCompleteSource.CustomSource .Location = New Point(20, 20) .Width = Me.ClientRectangle.Width - 40 .Visible = True End With ' Add the text box to the form. Me.Controls.Add(MyTextBox) End Sub
========================================================
Propriedade TextBox.AutoCompleteSourcehttps://msdn.microsoft.com/pt-br/library/system.windows.forms.textbox.autocompletesource(v=vs.110).aspx
========================================================Veja também:
========================================================
VB.NET - Usando o recurso AutoCompletarhttp://www.macoratti.net/09/02/vbn_aad.htm
================================================================================================================
TEXBOX AUTOCOMPLETE
http://vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=449687&pagina=1
========================================================[]'s,
Fabio I.- Editado Fabio I sábado, 7 de abril de 2018 23:56
- Sugerido como Resposta Lucio Rogerio SPBanned domingo, 8 de abril de 2018 00:45
sábado, 7 de abril de 2018 23:51 -
Fabio, obrigado por me responder.
Veja, essa mesma rotina que você me cedeu, ela esta logo acima, nesta mesma pergunta. A minha pergunta diz respeito a como montar uma rotina parecida mas dai num banco de dados, saberia me dar essa força?
Grato/Durval
- Marcado como Resposta Durval Teixeira quinta-feira, 19 de abril de 2018 14:56
- Não Marcado como Resposta Filipe B CastroModerator segunda-feira, 23 de abril de 2018 19:32
domingo, 8 de abril de 2018 02:39 -
Durval Teixeira,
OKay, consegui simular seu código aqui e funcionou.
- Vamos organizar as ideias:
1 - Ler o banco de dados e preencher TODOS os TextBox com o recurso "AutoCompleteCustomSource";
2 - Criar um botão "Inserir" que irá fazer o "INSERT";
3 - Disparar uma rotina de "checagem". Essa rotina verificará se o conteúdo do "AutoCompleteCustomSource" JÁ POSSUI o nome na lista;
3.1 - Caso NÃO exista o nome na lista, então disparará o código abaixo "InsertRow";
3.2 - Caso exista o nome na lista, então NÃO disparará o código abaixo "InsertRow";Public Sub InsertRow(ByVal connectionString As String, ByVal insertSQL As String) Using connection As New OleDbConnection(connectionString) ' The insertSQL string contains a SQL statement that ' inserts a new row in the source table. Dim command As New OleDbCommand(insertSQL) ' Set the Connection to the new OleDbConnection. command.Connection = connection ' Open the connection and execute the insert command. Try connection.Open() command.ExecuteNonQuery() Catch ex As Exception MessageBox.Show("deu erro") End Try ' The connection is automatically closed when the ' code exits the Using block. End Using
End Sub
Para o botão...
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\WindowsApplication1\WindowsApplication1\nomes.accdb;Persist Security Info=False;" Dim strSQL = "INSERT INTO Tabela1 ( Codigo, Nome )" 'Modifique de acordo com a sua tabela no Access
If Not TextBox1.AutoCompleteCustomSource.Contains(TextBox1.Text) Then
dados.InsertRow(strSQL, strCon)
End IfEnd Sub
Coloquei a rotina "InsertRow" dentro da sua classe "dados";
É isso?
[]'s,
Fabio I.- Editado Fabio I segunda-feira, 9 de abril de 2018 12:20
- Marcado como Resposta Durval Teixeira quarta-feira, 11 de abril de 2018 01:00
segunda-feira, 9 de abril de 2018 12:13