VB .NET - Como usar objetos DataSet - IV
Para encerrar esta sequência de artigos sobre o objeto DataSet vamos mostrar como criar uma pequena aplicação usando o DataSet tipado através do assistente de configuração do Visual Studio e algumas pinceladas de código aqui e ali para fazer tudo ficar funcionando.
Acompanhe o Curso - VB .NET - ADO .NET Prático (Curso) - e veja o que mudou na versão 2012. |
Vou usar como exemplo o acesso a uma base de dados Access Northwind.mdb presente no diretório c:\teste. Vamos acessar a tabela Produtos.
nota: O banco de dados Northwind.mdb que eu estou usando foi alterado para este exemplo:A tabela Produtos tem a seguinte estrutura:
a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
b- Na caixa de ferramentas selecione a aba - Data - e inclua o componente - OleDbDataAdapter - no formulário padrão - form1.vb.
c- A seguir na tela de configuração do Data Adapter clique no botão New Connection...
|
d- A seguir conforme telas mostradas abaixo , defina o provedor usado na conexão na aba Provedor ; Na aba Conexão selecione o banco de dados e clique no botão - Testar Conexao.
|
|
Na tela - Data Adapter Configuration Wizard - selecione - Use SQL statements e clique no botão - Next .
A seguir informe a instrução SQL , conforme abaixo , e clique no botão - Finish .
Nota: Voce pode clicar no botão - Query Builder - para criar a instrução SQL.
|
Observe que estão visíveis no formulário os componentes
OleDbConnection1: responsável pela conexão ao banco de dados;
OleDbDataAdapter1: responsável pela comunicação DataSet e a base de dados;
Além destes componentes visíveis , na seção Properties temos os componentes : OleDbSelectCommand1 , OleDbInsertCommand1, OleDbUpdateCommand1, OleDbDeleteCommand1 responsáveis pelos comandos SQL que selecionam , inserem , atualizam e excluem dados.
|
|
Vamos agora incluir um DataSet ao nosso projeto. Clique no componente OleDbDataAdapter1 com o botão direito do mouse e selecione : Generate DataSet.
|
Na próxima janela vamos criar um novo DataSet . Clique em New e informe o nome do DataSet ( Eu vou usar o nome Produtos) . A seguir clique em OK . Pronto !
Produtos representa a classe.
Produtos1 representa a instância da classe Produtos. A instância pode ser usada como argumento para preencher o DataSet , atualizar a base de dados , dentre outras operações.
|
O projeto agora possui uma classe DataSet e uma instância dela no formulário conforme a figura mostrada abaixo:
|
Agora que já temos um DataSet no projeto vamos criar um formulário com alguns botões que implementam as seguintes funcionalidades :
Preencher o DataGrid -
Excluir Dados -
Pesquisar Dados -
Atualizar dados -
Atualizar preço dos produtos -
No formulário vamos incluir um componente DataGrid , alguns botões de comando , um GroupBox e algumas Labels , conforme figura abaixo:
No componente DataGrid devemos definir as propriedades DataSource e DataMembers assim :
DataSource = Produtos1
DataMember = Produtos
- Preenchendo o DataGrid
No evento Click do botão - Preenche DataGrid - vamos inserir o código que preenche o DataGrid com os dados. ( eu poderia fazer isto de forma automática colocando o código no evento Load do formulário.)
Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Produtos1.Clear()
|
- Excluindo um registro
Para excluir um registro , eu vou usar o campo CódigoDoProduto para identificar o produto a ser removido. Vou usar o função InputBox para informar o código do produto a ser excluído. Eu tenho que converter o valor informado para um valor inteiro - Convert.ToInt32(codproduto).
Para remover o registro utilizo o método Remove - Produtos1.Produtos.Rows.Remove(registro). Veja o código abaixo:
Private
Sub Button4_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button4.Click
Dim codproduto As String codproduto = InputBox("Informe o codigo do produto a excluir ", "Código do Produto")
If codproduto <> "" Then Dim registro As Produtos.ProdutosRow = Produtos1.Produtos.FindByCódigoDoProduto(Convert.ToInt32(codproduto))' verifica se encontrou algum registro If registro Is Nothing ThenMsgBox("Não localizei produto com este código") Else Produtos1.Produtos.Rows.Remove(registro) End If ElseMsgBox("Codigo do produto inválido ! ", MsgBoxStyle.Exclamation, "Remover Produto") End If End Sub |
- Incluindo registros
A inclusão de registros é feita diretamente no DataGrid . Basta se posicionar e informar os valores dos novos dados. Na figura abaixo eu mostro a inclusão de um registro :
Nota : Para incluir uma nova linha na tabela poderíamos ter usado o código abaixo. Estamos fazendo isto no 'queixo duro' por questão de simplicidade. É claro que devemos respeitando a estrutura da tabela produtos , caso contrário ocorrerá um erro.
|
- Atualizando a base de dados
As operações de inclusão e exclusão explicadas acima , somente irão se refletir na base de dados após ser feita a atualização da mesma. Se você fizer qualquer operação que altere os dados e não atualizar a base de dados as mudanças não irão ser refletidas na base de dados.
O código abaixo mostra como atualizar a base de dados com as alterações feitas . No evento Click do botão - Atualizar - insira o código abaixo:
Private
Sub Button3_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button3.Click
' Verifica ocorreu alguma alteração nos dados If Produtos1.HasChanges() Then ' Obtém as alterações efetuadas Dim Alterados As DataSet = Produtos1.GetChanges() ' verifica se realmente houve alterações If Not Alterados Is Nothing Then ' manda as alterações para o bancoOleDbDataAdapter1.Update(Alterados) Produtos1.AcceptChanges() End If End If End Sub |
- Primeiro eu verifico se houve alguma alteração nos dados - Produtos1.HasChanges()
- A seguir eu crio um novo DataSet - Alterados - com os dados que foram alterados - Produtos1.GetChanges()
- Depois eu atualizo a fonte de dados - OleDbDataAdapter1.Update(Alterados)
- E finalmente as alterações são passadas para a base de dados : Produtos1.AcceptChanges()
Nota : uma outra forma de fazer a atualização seria usar somente o seguinte código : OleDbDataAdapter1.Update(Produtos1)
- Pesquisando Dados
Podemos pesquisar dados na tabela usando o - campo CódigoDoProduto - . Para fazer isto definimos uma variável registro , á qual será informada o código pelo qual deverá ser feita a busca. Se for encontrado exibimos os valores dos campos do registro.
Private
Sub Button2_Click_1(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button2.Click
Dim codproduto As String codproduto = InputBox("Informe o codigo do produto a excluir ", "Pesquisar Código do Produto")
If codproduto <> "" Then Dim registro As Produtos.ProdutosRow = Produtos1.Produtos.FindByCódigoDoProduto(Convert.ToInt32(codproduto))' Verifica se encontrou o registro If registro Is Nothing Then MsgBox("Produto não localizado !") Else MsgBox(" Produto : " & registro.NomeDoProduto & " Preço R$ " & registro.PreçoUnitário) End If ElseMsgBox("Codigo do produto inválido ! ", MsgBoxStyle.Exclamation, "Pesquisa por código do Produto") End If End Sub |
- Atualizando todos os registros
Podemos alterar todos os registros da tabela usando um laço para percorrer cada registro da mesma e alterar um campo desejado. No exemplo eu estou realizando um reajuste no preço . O usuário informa o índice e cada campo PreçoUnitário é reajustado segundo a formula :
Registro.PreçoUnitário = Registro.PreçoUnitário + (Registro.PreçoUnitário * (Convert.ToInt32(indice) / 100))
Private
Sub Button5_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button5.Click
Dim Registro As Produtos.ProdutosRow Dim i As Integer Dim indice As Stringindice = InputBox("Informe o percentual (%) do reajuste dos preços dos produtos . Ex: 10 ( 10%) ", "Percentual de Reajuste")
If indice <> "" Then ' percorre a tabelaFor i = 0 To Produtos1.Produtos.Rows.Count - 1 ' Pega o registro Registro = Produtos1.Produtos(i) ' Modifica o preço Registro.PreçoUnitário = Registro.PreçoUnitário + (Registro.PreçoUnitário * (Convert.ToInt32(indice) / 100)) Next MsgBox(" Todos os registros foram reajustados com sucesso !", MsgBoxStyle.Information, "Reajuste") ElseMsgBox("O valor do indice de reajuste é inválido ! ", MsgBoxStyle.Exclamation, "indice de reajuste") End If |
Você esta percebendo como é fácil trabalhar com DataSets desta forma. Graças aos DataSets tipados isto é possível . Sim DataSets tipados. !!
Os DataSets podem ser tipados ou não . Um DataSet tipado é um dataset que é derivado de uma classe DataSet e que usa a informação contida em um arquivo de esquema XML ( .xsd ) para gerar uma nova classe. Toda a informação do esquema ( tabelas , colunas, linhas , etc..) é gerada e compilada neste nova classe DataSet. Como esta nova classe é derivada (herdar) da classe DataSet ela assuem toda a funcionalidade da classe DataSet.
Um DataSet não tipado não possui um corresponde arquivo de esquema , ele também possui tabelas , colunas , linhas , etc mas que são expostas somente como uma coleção. Você é quem deverá informar os nomes dos itens presentes nas coleções . Isto pode levar a que os erros sejam detectados somente na hora da compilação. Por exemplo , a linha de código abaixo tem um erro de digitação no nome da tabela que será detectado somente quando você for compilar o código
Ex: dim dt As Datatable = ds.Tables("Prodtos")
Vejamos a seguir a comparação entre dois códigos que acessam dados . Um usa DataSets tipados e outro não tipado:
Usando DataSet tipados | Usando DataSets não tipados |
'
Acessando a coluna CustomerID na 1a linha da tabela Customers
Dim s As String |
Dim s As String s = CType(dsCustomersOrders1.Tables("Customers").Rows(0).Item("CustomerID"), String) |
Além de ser mais fácil de usar um DataSet tipado permite que você use o recurso da intellisense no seu código ao usar o editor do Visual Studio. É claro que haverá ocasiões que você vai ter que usar um DataSet não tipado .
Fechamos aqui o clico de artigos sobre a classe DataSet . Há ainda muito o que falar sobre ela , farei isto em outros artigos sobre o assunto. Aguardem...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: