SlideShare ist ein Scribd-Unternehmen logo
1 von 9
VB.NET - Usando ADO para acesso e manutenção de dados
Lembra da ADO (ActiveX Data Object) ? Você sabia que podemos usar ADO
normalmente em nossos projetos VB.NET para acessar e gerenciar dados ?
Se você sente saudades ou pretende usar os recursos que a ADO oferecia para
navegação pelos registros e atualização dos mesmos em seus projetos VB.NET,
sinta-se a vontade pois neste artigo eu vou mostrar como podemos usar ADO para
acessar , selecionar , alterar, incluir , excluir e navegar pelos registros de uma
tabela de um banco de dados Access.
ADO.NET não possui recursos de movimentação pelos registros nem suporta
cursores. Os recursos de navegação pelos registros tais como MoveFirst , MoveNext
, etc. não são suportados. Com ADO podemos usar estes recursos sem problemas
usando o objeto Recordset em um projeto VB.NET para acesso a dados.
A minha intenção é mostrar que é possível usar ADO com o VB.NET mas
sinceramente eu não encorajo esta prática pois a nova tecnologia ADO.NET oferece
mais recursos.
Criando o projeto no VB.NET
O objetivo do projeto é acessar a tabela Produtos do banco de dados ITEM.mdb .
A estrutura da tabela é a seguinte :
Vamos criar um projeto VB.NET do tipo Windows Application dando o nome a ele de
ITEM. O projeto irá possuir somente um formulário - form1.vb. Neste formulário
vamos incluir alguns controles : TextBox , Button , Label e um controle DataGrid ;
conforme figura abaixo.
Nota: Eu estou usando o Visual Studio .NET 2003 e o Framework 1.1.
-Os botões : Primeiro ,
Próximo, Anterior e
Último irão fazer a
navegação pelos registros
- Os botões : Novo ,
Salvar , Edita , Excluir
irão efetuar operações de
manutenção de dados
- O botão - Procurar - irá
localizar dados na fonte
de informações
Neste projeto iremos
utilizar dois recordsets RS
e RS1 .
O recordset RS1 será
usado para exibir os
dados nas caixas de texto.
É ele que irá ser acionado
para incluir, alterar,
excluir e navegar pelos
registros
O recordset RS será
usado para exibir os
dados no DataGrid.
Estarei preenchendo o
DataGrid via objeto
DataAdatper e DataSet.
Para pode utilizar os objetos ADO devemos incluir uma
referência em nosso projeto para a biblioteca ADODB.Fazemos isto
clicando com o botão direito do mouse sobre o nome do projeto e
selecionando a opção Add Reference. A seguir na janela Add
reference , na guia NET , selecione adodb e clique no botão OK. Na
figura abaixo temos a seleção da biblioteca e o resultado final com a
biblioteca referenciada no projeto.
Feito isto já podemos criar nosso código usando ADO no projeto. Vamos lá. (Eu não
vou repetir as explicações referente ao código ADO pois já foi exaustivamente
discutido em diversos artigos)
O código do projeto
Primeiro vou declarar o namespace System.Data.OleDB e definir as variáveis :
 RS e RS1 do tipo ADODB.Recordset
 da - OleDbDataAdapter
 ds - DataSet
A primeira linha do projeto seria então um import no namespace System.Data:
Imports System.Data.OleDb
A seguir já no formulário teríamos as declarações das variáveis:
Dim CN As New ADODB.Connection
Dim RS, RS1 As New ADODB.Recordset
Dim da As New OleDbDataAdapter
Dim ds As New DataSet
No evento Load do formulário teremos a criação da conexão com o banco de dados
e o chamamento das rotinas :
 carregaDados() - preenche as caixas de texto com os dados do recordset
RS1
 carregaGrid() - preenche o DataGrid com os dados do recordset RS
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
CN = New ADODB.Connection 'conexao usando ADO
CN.Open("Provider = MICROSOFT.JET.OLEDB.4.0;data
Source=ITEM.MDB ")
Call carregaDados() 'exibe informação do recordset nas caixas
de texto
Call CarregaGrid() 'exibe informação da tabela no grid
End Sub
A rotina carregaDados tem o seguinte código : O código cria um novo objeto
Recordset do tipo ADO e seleciona todos os registros da tabela Produtos usando a
instrução SQL : select * from Produtos order by Codigo.
A seguir invocamos a rotina exibeTexto(). Esta rotina apenas preenche os
TextBox do formulário atribuindo os dados do recordset a cada TextBox.
Private Sub carregaDados()
'quando o formulario é carregado os dados são exibidos no
textbox
RS1 = New ADODB.Recordset
RS1.Open("select * from Produtos order by Codigo", CN, 1, 2)
Call exibeTexto()
End Sub
A rotina carregaGrid() cria o recordset RS da mesma forma que a rotina
carregaDados e cria também um objeto DataAdapter e um objeto DataSet para
preencher o DataSet com os dados da tabela Produtos e exibição no DataGrid.
Private Sub CarregaGrid()
'exibe informação da tabela no grid
RS = New ADODB.Recordset
RS.Open("select * from Produtos order by Codigo", CN, 1, 2)
da = New OleDbDataAdapter
ds = New DataSet
da.Fill(ds, RS, "Produtos")
DataGrid1.DataSource = ds.Tables("Produtos")
DataGrid1.Refresh()
End Sub
A rotina exibeTexto() é muito simples , seu código é dado a seguir. Esta rotina
será chamada sempre que eu desejar exibir os dados nas caixas de texto.
Private Sub exibeTexto()
Codigo.Text = RS1.Fields("Codigo").Value
Nome.Text = RS1.Fields("Nome").Value
Quantidade.Text = RS1.Fields("Quantidade").Value
Preco.Text = RS1.Fields("Preco").Value
Total.Text = RS1.Fields("total").Value
End Sub
Vamos agora mostrar o código dos botões que efetuam manutenção nos dados:
1- Código do botão Novo. Este código limpa as caixas de texto , chama a rotina
HabilitaTextBox() , põe o foco na caixa Codigo e habilita o botão Salvar
desabilitando os demais.
'botao NOVO
Private Sub ButADD_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ButADD.Click
Codigo.Text = ""
Nome.Text = ""
Quantidade.Text = ""
Preco.Text = ""
Total.Text = ""
Call HabilitaTextBox()
Codigo.Focus()
ButSAVE.Enabled = True
ButADD.Enabled = False
ButEDIT.Enabled = False
ButDELETE.Enabled = False
MoveFirst.Enabled = False
MovePrevious.Enabled = False
MoveNext.Enabled = False
MoveLast.Enabled = False
End Sub
2- O Botão Salvar pode possuir dois valores : Salvar e Atualizar. Conforme a opção
indicada no botão teremos uma ação a ser realizada: incluir novo registro ou
atualizar o registro. Note que estou chamando as rotinas carregaDados e
carregaGrid apos as operações para atualizar a exibição dos dados.
'botao salvar
Private Sub ButSAVE_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ButSAVE.Click
If Codigo.Text = "" Or Nome.Text = "" Or Quantidade.Text = ""
Or Preco.Text = ""
Then MsgBox("Informe o nome do produto.", MsgBoxStyle.Critical) : Exit
Sub
If ButSAVE.Text = "Salvar" Then
RS1 = New ADODB.Recordset
RS1.Open("select * from Produtos ", CN,
ADODB.CursorTypeEnum.adOpenStatic,
ADODB.LockTypeEnum.adLockOptimistic)
' se incluir um novo registro
RS1.AddNew()
RS1.Fields("Codigo").Value() = Codigo.Text
RS1.Fields("Nome").Value = Nome.Text
RS1.Fields("Quantidade").Value = Quantidade.Text
RS1.Fields("Preco").Value = Preco.Text
RS1.Fields("total").Value = Total.Text
RS1.Update()
Call carregaDados()
Call CarregaGrid()
MsgBox("Seus dados foram incluídos com sucesso",
MsgBoxStyle.Information, "Dados gravados")
ButEDIT.Enabled = True
ButADD.Enabled = True
ButDELETE.Enabled = True
ButSAVE.Enabled = False
MoveFirst.Enabled = True
MovePrevious.Enabled = True
MoveNext.Enabled = True
MoveLast.Enabled = True
End If
'se quiser Atualiza o arquivo
If ButSAVE.Text = "Atualiza" Then
RS1 = New ADODB.Recordset
RS1.Open("select * from Produtos where codigo=" &
CInt(Codigo.Text), CN, ADODB.CursorTypeEnum.adOpenStatic,
ADODB.LockTypeEnum.adLockOptimistic)
RS1.Fields("Codigo").Value() = Codigo.Text
RS1.Fields("Nome").Value = Nome.Text
RS1.Fields("Quantidade").Value = Quantidade.Text
RS1.Fields("Preco").Value = Preco.Text
RS1.Fields("total").Value = Total.Text
RS1.Update()
Call carregaDados()
Call CarregaGrid()
MsgBox("Registros atualizados com sucesso",
MsgBoxStyle.Information, "Atualiza")
ButADD.Enabled = True
ButSAVE.Text = "Salvar"
ButSAVE.Enabled = False
ButEDIT.Enabled = True
ButDELETE.Enabled = True
MoveFirst.Enabled = True
MovePrevious.Enabled = True
MoveNext.Enabled = True
MoveLast.Enabled = True
End If
End Sub
3- O botão Editar apenas altera o nome do botão para Atualizar e desabilita os
demais botões.
'bota editar
Private Sub ButEDIT_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ButEDIT.Click
Call HabilitaTextBox()
ButEDIT.Enabled = False
ButADD.Enabled = False
ButDELETE.Enabled = False
ButSAVE.Enabled = True
ButSAVE.Text = "Atualiza"
MoveFirst.Enabled = False
MovePrevious.Enabled = False
MoveNext.Enabled = False
MoveLast.Enabled = False
End Sub
4- O botão Excluir exclui o registro selecionado e atualiza a exibição.
'botão excluir
Private Sub ButDELETE_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles ButDELETE.Click
Dim resposta As String
resposta = MsgBox("Confirma exclusão deste produto '" &
Nome.Text & "' ?",
MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Excluir")
If resposta = vbNo Then Exit Sub
RS1 = New ADODB.Recordset
RS1.Open("DELETE from Produtos where Nome = '" & Nome.Text &
"'", CN, 1, 2)
MsgBox("'" & Nome.Text & "' Produto Excluido ",
MsgBoxStyle.Information, "Excluido")
Call CarregaGrid()
Call carregaDados()
End Sub
O botão Procurar realiza uma busca na tabela e gera um recordset conforme o
critério :
"SELECT * FROM Produtos WHERE Nome LIKE '" &
Txtbusca.Text & "%' "
onde txtbusca.text é critério de busca informado na caixa de texto para o nome do
produto.
'Procurar
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
If Button1.Text = "Procurar" Then
If Txtsearch.Text = "" Then MsgBox("Informe o nome do
Produto", MsgBoxStyle.Critical, "Nome do Produto")
: Exit Sub
da = New OleDbDataAdapter
ds = New DataSet
RS1 = New ADODB.Recordset
RS1.Open("SELECT * FROM Produtos WHERE Nome LIKE '" &
Txtsearch.Text & "%' ",
CN, ADODB.CursorTypeEnum.adOpenStatic,
ADODB.LockTypeEnum.adLockOptimistic)
RS1.MoveFirst()
Call exibeTexto()
da.Fill(ds, RS1, "ITEM")
DataGrid1.DataSource = ds.Tables(0)
Button1.Text = "Todos"
Else
Button1.Text = "Procurar"
Call CarregaGrid()
Call carregaDados()
End If
End Sub
As rotinas de navegação pelos registros são mostradas abaixo:
'primeiro
Private Sub MoveFirst_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MoveFirst.Click
On Error Resume Next
RS1.MoveFirst()
Call exibeTexto()
End Sub
'proximo
Private Sub MoveNext_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MoveNext.Click
On Error Resume Next
If RS1.EOF = True Then MsgBox("Este é o último registro",
MsgBoxStyle.Information, "Último") : Exit Sub
RS1.MoveNext()
If RS1.EOF = True Then MsgBox("Último registro",
MsgBoxStyle.Information, "Fim") : Exit Sub
Call exibeTexto()
End Sub
'anterior
Private Sub MovePrevious_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MovePrevious.Click
On Error Resume Next
If RS1.BOF = True Then MsgBox("Primeiro registro",
MsgBoxStyle.Information, "Primeiro") : Exit Sub
RS1.MovePrevious()
If RS1.BOF = True Then MsgBox("Primeiro registro",
MsgBoxStyle.Information, "Primeiro") : Exit Sub
Call exibeTexto()
End Sub
'ultimo
Private Sub MoveLast_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MoveLast.Click
On Error Resume Next
RS1.MoveLast()
Call exibeTexto()
End Sub
Nos eventos Changed e KeyPress das caixas de texto para Preço e Quantidade
coloquei um código para recálculo do valor total conforme código abaixo:
'Se alterar o preço recalcula o total
Private Sub Preco_TextChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Preco.TextChanged
Total.Text = Val(Quantidade.Text) * Val(Preco.Text)
End Sub
'se alterar a quantidade então recalcula o total
Private Sub Quantidade_TextChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Quantidade.TextChanged
Total.Text = Val(Quantidade.Text) * Val(Preco.Text)
End Sub
Private Sub Total_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles Total.KeyPress
Total.Text = Val(Quantidade.Text) * Val(Preco.Text)
End Sub
Executando o projeto teremos o seguinte resultado:
Eu não me preocupei muito com validação de dados nem com tratamento de erros.
Meu objetivo era apenas criar um projeto VB.NET funcional usando ADO para
acesso e manutenção dos dados. Espero que gostem...
Pegue o projeto completo aqui : produtos.zip

Weitere ähnliche Inhalte

Andere mochten auch

Textkernel Talks - Neo4j usage in Textkernel
Textkernel Talks - Neo4j usage in TextkernelTextkernel Talks - Neo4j usage in Textkernel
Textkernel Talks - Neo4j usage in TextkernelTextkernel
 
New Developments in Machine Learning - Prof. Dr. Max Welling
New Developments in Machine Learning - Prof. Dr. Max WellingNew Developments in Machine Learning - Prof. Dr. Max Welling
New Developments in Machine Learning - Prof. Dr. Max WellingTextkernel
 
Guerrilla or Grassroots? The what and how to Agile HR
Guerrilla or Grassroots? The what and how to Agile HRGuerrilla or Grassroots? The what and how to Agile HR
Guerrilla or Grassroots? The what and how to Agile HRFabiola Eyholzer
 
Apache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesApache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesMichele Mostarda
 

Andere mochten auch (6)

"Il Lavoro in....rosa"
"Il Lavoro in....rosa""Il Lavoro in....rosa"
"Il Lavoro in....rosa"
 
Textkernel Talks - Neo4j usage in Textkernel
Textkernel Talks - Neo4j usage in TextkernelTextkernel Talks - Neo4j usage in Textkernel
Textkernel Talks - Neo4j usage in Textkernel
 
New Developments in Machine Learning - Prof. Dr. Max Welling
New Developments in Machine Learning - Prof. Dr. Max WellingNew Developments in Machine Learning - Prof. Dr. Max Welling
New Developments in Machine Learning - Prof. Dr. Max Welling
 
Cnidarios
CnidariosCnidarios
Cnidarios
 
Guerrilla or Grassroots? The what and how to Agile HR
Guerrilla or Grassroots? The what and how to Agile HRGuerrilla or Grassroots? The what and how to Agile HR
Guerrilla or Grassroots? The what and how to Agile HR
 
Apache Any23 - Anything to Triples
Apache Any23 - Anything to TriplesApache Any23 - Anything to Triples
Apache Any23 - Anything to Triples
 

Ähnlich wie Usando ADO no VB.NET para acesso a dados

Ähnlich wie Usando ADO no VB.NET para acesso a dados (20)

Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
 
Desenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a DadosDesenvolvimento em .Net - Acesso a Dados
Desenvolvimento em .Net - Acesso a Dados
 
14 patterns-curso gxxbr
14 patterns-curso gxxbr14 patterns-curso gxxbr
14 patterns-curso gxxbr
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
 
10 sd ts-curso-gxxbr
10 sd ts-curso-gxxbr10 sd ts-curso-gxxbr
10 sd ts-curso-gxxbr
 
11 data providers-cursogxxbr
11 data providers-cursogxxbr11 data providers-cursogxxbr
11 data providers-cursogxxbr
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de Dados
 
Cadastro de clientes em c#
Cadastro de clientes em c#Cadastro de clientes em c#
Cadastro de clientes em c#
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdf
 
Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8
 
asdasdasdsadasdsadasd
asdasdasdsadasdsadasdasdasdasdsadasdsadasd
asdasdasdsadasdsadasd
 
rytyeyyey
rytyeyyeyrytyeyyey
rytyeyyey
 
Ado
AdoAdo
Ado
 
Vb
VbVb
Vb
 
CURSO JAVA 01
CURSO JAVA 01CURSO JAVA 01
CURSO JAVA 01
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr
 
ADO.ppt
ADO.pptADO.ppt
ADO.ppt
 

Usando ADO no VB.NET para acesso a dados

  • 1. VB.NET - Usando ADO para acesso e manutenção de dados Lembra da ADO (ActiveX Data Object) ? Você sabia que podemos usar ADO normalmente em nossos projetos VB.NET para acessar e gerenciar dados ? Se você sente saudades ou pretende usar os recursos que a ADO oferecia para navegação pelos registros e atualização dos mesmos em seus projetos VB.NET, sinta-se a vontade pois neste artigo eu vou mostrar como podemos usar ADO para acessar , selecionar , alterar, incluir , excluir e navegar pelos registros de uma tabela de um banco de dados Access. ADO.NET não possui recursos de movimentação pelos registros nem suporta cursores. Os recursos de navegação pelos registros tais como MoveFirst , MoveNext , etc. não são suportados. Com ADO podemos usar estes recursos sem problemas usando o objeto Recordset em um projeto VB.NET para acesso a dados. A minha intenção é mostrar que é possível usar ADO com o VB.NET mas sinceramente eu não encorajo esta prática pois a nova tecnologia ADO.NET oferece mais recursos. Criando o projeto no VB.NET O objetivo do projeto é acessar a tabela Produtos do banco de dados ITEM.mdb . A estrutura da tabela é a seguinte : Vamos criar um projeto VB.NET do tipo Windows Application dando o nome a ele de ITEM. O projeto irá possuir somente um formulário - form1.vb. Neste formulário vamos incluir alguns controles : TextBox , Button , Label e um controle DataGrid ; conforme figura abaixo. Nota: Eu estou usando o Visual Studio .NET 2003 e o Framework 1.1.
  • 2. -Os botões : Primeiro , Próximo, Anterior e Último irão fazer a navegação pelos registros - Os botões : Novo , Salvar , Edita , Excluir irão efetuar operações de manutenção de dados - O botão - Procurar - irá localizar dados na fonte de informações Neste projeto iremos utilizar dois recordsets RS e RS1 . O recordset RS1 será usado para exibir os dados nas caixas de texto. É ele que irá ser acionado para incluir, alterar, excluir e navegar pelos registros O recordset RS será usado para exibir os dados no DataGrid. Estarei preenchendo o DataGrid via objeto DataAdatper e DataSet. Para pode utilizar os objetos ADO devemos incluir uma referência em nosso projeto para a biblioteca ADODB.Fazemos isto clicando com o botão direito do mouse sobre o nome do projeto e selecionando a opção Add Reference. A seguir na janela Add reference , na guia NET , selecione adodb e clique no botão OK. Na figura abaixo temos a seleção da biblioteca e o resultado final com a biblioteca referenciada no projeto.
  • 3. Feito isto já podemos criar nosso código usando ADO no projeto. Vamos lá. (Eu não vou repetir as explicações referente ao código ADO pois já foi exaustivamente discutido em diversos artigos) O código do projeto Primeiro vou declarar o namespace System.Data.OleDB e definir as variáveis :  RS e RS1 do tipo ADODB.Recordset  da - OleDbDataAdapter  ds - DataSet A primeira linha do projeto seria então um import no namespace System.Data: Imports System.Data.OleDb A seguir já no formulário teríamos as declarações das variáveis: Dim CN As New ADODB.Connection Dim RS, RS1 As New ADODB.Recordset Dim da As New OleDbDataAdapter Dim ds As New DataSet No evento Load do formulário teremos a criação da conexão com o banco de dados e o chamamento das rotinas :  carregaDados() - preenche as caixas de texto com os dados do recordset RS1  carregaGrid() - preenche o DataGrid com os dados do recordset RS
  • 4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CN = New ADODB.Connection 'conexao usando ADO CN.Open("Provider = MICROSOFT.JET.OLEDB.4.0;data Source=ITEM.MDB ") Call carregaDados() 'exibe informação do recordset nas caixas de texto Call CarregaGrid() 'exibe informação da tabela no grid End Sub A rotina carregaDados tem o seguinte código : O código cria um novo objeto Recordset do tipo ADO e seleciona todos os registros da tabela Produtos usando a instrução SQL : select * from Produtos order by Codigo. A seguir invocamos a rotina exibeTexto(). Esta rotina apenas preenche os TextBox do formulário atribuindo os dados do recordset a cada TextBox. Private Sub carregaDados() 'quando o formulario é carregado os dados são exibidos no textbox RS1 = New ADODB.Recordset RS1.Open("select * from Produtos order by Codigo", CN, 1, 2) Call exibeTexto() End Sub A rotina carregaGrid() cria o recordset RS da mesma forma que a rotina carregaDados e cria também um objeto DataAdapter e um objeto DataSet para preencher o DataSet com os dados da tabela Produtos e exibição no DataGrid. Private Sub CarregaGrid() 'exibe informação da tabela no grid RS = New ADODB.Recordset RS.Open("select * from Produtos order by Codigo", CN, 1, 2) da = New OleDbDataAdapter ds = New DataSet da.Fill(ds, RS, "Produtos") DataGrid1.DataSource = ds.Tables("Produtos") DataGrid1.Refresh() End Sub A rotina exibeTexto() é muito simples , seu código é dado a seguir. Esta rotina será chamada sempre que eu desejar exibir os dados nas caixas de texto. Private Sub exibeTexto() Codigo.Text = RS1.Fields("Codigo").Value Nome.Text = RS1.Fields("Nome").Value Quantidade.Text = RS1.Fields("Quantidade").Value Preco.Text = RS1.Fields("Preco").Value Total.Text = RS1.Fields("total").Value End Sub Vamos agora mostrar o código dos botões que efetuam manutenção nos dados:
  • 5. 1- Código do botão Novo. Este código limpa as caixas de texto , chama a rotina HabilitaTextBox() , põe o foco na caixa Codigo e habilita o botão Salvar desabilitando os demais. 'botao NOVO Private Sub ButADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButADD.Click Codigo.Text = "" Nome.Text = "" Quantidade.Text = "" Preco.Text = "" Total.Text = "" Call HabilitaTextBox() Codigo.Focus() ButSAVE.Enabled = True ButADD.Enabled = False ButEDIT.Enabled = False ButDELETE.Enabled = False MoveFirst.Enabled = False MovePrevious.Enabled = False MoveNext.Enabled = False MoveLast.Enabled = False End Sub 2- O Botão Salvar pode possuir dois valores : Salvar e Atualizar. Conforme a opção indicada no botão teremos uma ação a ser realizada: incluir novo registro ou atualizar o registro. Note que estou chamando as rotinas carregaDados e carregaGrid apos as operações para atualizar a exibição dos dados. 'botao salvar Private Sub ButSAVE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButSAVE.Click If Codigo.Text = "" Or Nome.Text = "" Or Quantidade.Text = "" Or Preco.Text = "" Then MsgBox("Informe o nome do produto.", MsgBoxStyle.Critical) : Exit Sub If ButSAVE.Text = "Salvar" Then RS1 = New ADODB.Recordset RS1.Open("select * from Produtos ", CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic) ' se incluir um novo registro RS1.AddNew() RS1.Fields("Codigo").Value() = Codigo.Text RS1.Fields("Nome").Value = Nome.Text RS1.Fields("Quantidade").Value = Quantidade.Text RS1.Fields("Preco").Value = Preco.Text RS1.Fields("total").Value = Total.Text RS1.Update() Call carregaDados() Call CarregaGrid() MsgBox("Seus dados foram incluídos com sucesso", MsgBoxStyle.Information, "Dados gravados") ButEDIT.Enabled = True ButADD.Enabled = True ButDELETE.Enabled = True ButSAVE.Enabled = False MoveFirst.Enabled = True MovePrevious.Enabled = True
  • 6. MoveNext.Enabled = True MoveLast.Enabled = True End If 'se quiser Atualiza o arquivo If ButSAVE.Text = "Atualiza" Then RS1 = New ADODB.Recordset RS1.Open("select * from Produtos where codigo=" & CInt(Codigo.Text), CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic) RS1.Fields("Codigo").Value() = Codigo.Text RS1.Fields("Nome").Value = Nome.Text RS1.Fields("Quantidade").Value = Quantidade.Text RS1.Fields("Preco").Value = Preco.Text RS1.Fields("total").Value = Total.Text RS1.Update() Call carregaDados() Call CarregaGrid() MsgBox("Registros atualizados com sucesso", MsgBoxStyle.Information, "Atualiza") ButADD.Enabled = True ButSAVE.Text = "Salvar" ButSAVE.Enabled = False ButEDIT.Enabled = True ButDELETE.Enabled = True MoveFirst.Enabled = True MovePrevious.Enabled = True MoveNext.Enabled = True MoveLast.Enabled = True End If End Sub 3- O botão Editar apenas altera o nome do botão para Atualizar e desabilita os demais botões. 'bota editar Private Sub ButEDIT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButEDIT.Click Call HabilitaTextBox() ButEDIT.Enabled = False ButADD.Enabled = False ButDELETE.Enabled = False ButSAVE.Enabled = True ButSAVE.Text = "Atualiza" MoveFirst.Enabled = False MovePrevious.Enabled = False MoveNext.Enabled = False MoveLast.Enabled = False End Sub 4- O botão Excluir exclui o registro selecionado e atualiza a exibição. 'botão excluir Private Sub ButDELETE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButDELETE.Click Dim resposta As String resposta = MsgBox("Confirma exclusão deste produto '" & Nome.Text & "' ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Excluir") If resposta = vbNo Then Exit Sub
  • 7. RS1 = New ADODB.Recordset RS1.Open("DELETE from Produtos where Nome = '" & Nome.Text & "'", CN, 1, 2) MsgBox("'" & Nome.Text & "' Produto Excluido ", MsgBoxStyle.Information, "Excluido") Call CarregaGrid() Call carregaDados() End Sub O botão Procurar realiza uma busca na tabela e gera um recordset conforme o critério : "SELECT * FROM Produtos WHERE Nome LIKE '" & Txtbusca.Text & "%' " onde txtbusca.text é critério de busca informado na caixa de texto para o nome do produto. 'Procurar Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Button1.Text = "Procurar" Then If Txtsearch.Text = "" Then MsgBox("Informe o nome do Produto", MsgBoxStyle.Critical, "Nome do Produto") : Exit Sub da = New OleDbDataAdapter ds = New DataSet RS1 = New ADODB.Recordset RS1.Open("SELECT * FROM Produtos WHERE Nome LIKE '" & Txtsearch.Text & "%' ", CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic) RS1.MoveFirst() Call exibeTexto() da.Fill(ds, RS1, "ITEM") DataGrid1.DataSource = ds.Tables(0) Button1.Text = "Todos" Else Button1.Text = "Procurar" Call CarregaGrid() Call carregaDados() End If End Sub As rotinas de navegação pelos registros são mostradas abaixo: 'primeiro Private Sub MoveFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MoveFirst.Click On Error Resume Next RS1.MoveFirst() Call exibeTexto() End Sub
  • 8. 'proximo Private Sub MoveNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MoveNext.Click On Error Resume Next If RS1.EOF = True Then MsgBox("Este é o último registro", MsgBoxStyle.Information, "Último") : Exit Sub RS1.MoveNext() If RS1.EOF = True Then MsgBox("Último registro", MsgBoxStyle.Information, "Fim") : Exit Sub Call exibeTexto() End Sub 'anterior Private Sub MovePrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MovePrevious.Click On Error Resume Next If RS1.BOF = True Then MsgBox("Primeiro registro", MsgBoxStyle.Information, "Primeiro") : Exit Sub RS1.MovePrevious() If RS1.BOF = True Then MsgBox("Primeiro registro", MsgBoxStyle.Information, "Primeiro") : Exit Sub Call exibeTexto() End Sub 'ultimo Private Sub MoveLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MoveLast.Click On Error Resume Next RS1.MoveLast() Call exibeTexto() End Sub Nos eventos Changed e KeyPress das caixas de texto para Preço e Quantidade coloquei um código para recálculo do valor total conforme código abaixo: 'Se alterar o preço recalcula o total Private Sub Preco_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Preco.TextChanged Total.Text = Val(Quantidade.Text) * Val(Preco.Text) End Sub 'se alterar a quantidade então recalcula o total Private Sub Quantidade_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quantidade.TextChanged Total.Text = Val(Quantidade.Text) * Val(Preco.Text) End Sub Private Sub Total_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Total.KeyPress Total.Text = Val(Quantidade.Text) * Val(Preco.Text) End Sub Executando o projeto teremos o seguinte resultado:
  • 9. Eu não me preocupei muito com validação de dados nem com tratamento de erros. Meu objetivo era apenas criar um projeto VB.NET funcional usando ADO para acesso e manutenção dos dados. Espero que gostem... Pegue o projeto completo aqui : produtos.zip