ado vb dot net 2010

10
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.

Upload: marcos0512

Post on 07-Jan-2017

44 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Ado vb dot net 2010

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. 

Page 2: Ado vb dot net 2010

-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.

Page 3: Ado vb dot net 2010

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.ConnectionDim RS, RS1 As New ADODB.RecordsetDim da As New OleDbDataAdapterDim 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

Page 4: Ado vb dot net 2010

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").ValueEnd Sub

Vamos agora mostrar o código dos botões que efetuam manutenção nos dados:

Page 5: Ado vb dot net 2010

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

Page 6: Ado vb dot net 2010

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 = FalseEnd 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 &

Page 7: Ado vb dot net 2010

"'", 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

Page 8: Ado vb dot net 2010

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:

Page 9: Ado vb dot net 2010

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