VB.NET 2008 - Protótipo para Sistema de Vendas com LINQ - I


Neste artigo eu vou procurar esclarecer algumas dúvidas básicas relacionadas com o tratamento de informações localizadas em múltiplas tabelas quais sejam:

A novidade é que eu pretendo fazer isso usando os recursos do LINQ to SQL.

Para poder tratar do assunto criei um pequeno protótipo de uma aplicação para registro de Vendas onde temos as seguintes entidades:

O relacionamento entre estas tabelas é o seguinte:

Meu objetivo é mostrar os procedimentos que devem ser feitos (naturalmente estou mostrando uma das possibilidades) para realizar a operação de venda de um produto que envolve os seguintes passos:

  • Selecionar um Cliente cadastrado;
  • Selecionar um Produto cadastrado;
  • Definir a quantidade da venda;
  • Verificar o estoque;
  • Registrar a venda;
  • Atualizar a tabela de pedidos;
  • Atualizar a tabela de detalhes dos pedidos;
  • Atualizar a quantidade do estoque;
  • Calcular o total do pedido;

Ao lado temos o formulário de Vendas onde serão realizadas todas as operações relacionadas.

Eu estou usando as seguintes ferramentas neste projeto:

Foi criado o banco de dados JcmSoft.mdf contendo as tabelas: Clientes, Produtos, Pedidos e DetalhesPedidos. Os campos de cada uma destas tabela pode ser visualizado na figura abaixo:

Vamos iniciar criando um novo projeto do tipo Windows Forms Application , Abrindo o VB 2008 Express e selecionando a opção File -> New Project e informando nome do projeto como : Vendas.

Vamos criar uma fonte de dados usando a opção Data -> Add New Data Source do menu;

- A seguir selecione a opção DataBase e clique em Next>;

- Defina uma conexão com o banco de dados JcmSoft.mdf , clicando no botão New Connection e selecionando a conexão SQL Server e a seguir o banco de dados, ao final clique em Next>;

- A seguir expanda os objetos Tables e selecione as tabelas relacionadas:

Aceite o nome padrão dado ao DataSet e clique em Finish;

Você verá na Janela Solution Explorer o dataset JcmSoftDataSet. Clique duas vezes sobre ele para visualizar a estrutura da fonte de dados criada;

Note que temos definidas as chaves primárias , chaves estrangeiras e os relacionamentos entre as tabelas.

Eu criei este Data Source para poder criar os formulários para cadastrar Clientes e Produtos. Poderia ter usado o LINQ mas como o meu foco será o formulário de Vendas resolvi criar estes formulários rapidamente já prontos com os recursos para incluir, alterar e excluir dados.

Para criar o formulário de Clientes , inclua um novo formulário no projeto a partir do menu Project opção Add Windows Forms, e informe o nome Clientes.vb.

A seguir abra a janela Data Sources e no dataset selecione a tabela Clientes alterando o seu modo de apresentação para Details. Após isso arraste e solte a tabela no formulário Clientes.vb.

Serão criados os controles vinculados, os recursos para navegação e as funcionalidades para incluir, alterar e excluir dados.

Para criar o formulário de Produtos , inclua um novo formulário no projeto a partir do menu Project opção Add Windows Forms, e informe o nome Produtos.vb.

A seguir abra a janela Data Sources e no dataset selecione a tabela Produtos alterando o seu modo de apresentação para Details. Após isso arraste e solte a tabela no formulário Produtos.vb.

Serão criados os controles vinculados, os recursos para navegação e as funcionalidades para incluir, alterar e excluir dados.

Com isso já podemos cadastrar produtos e clientes que serão usados para registrar as vendas de produtos.

Vamos preparar o ambiente para usar os recursos do LINQ To SQL. No menu Project selecione a opção Add new Item e na janela Templates selecione o item LINQ To SQL Classes informando o nome JcmSoft.dbml e clicando em Add;

Neste momento será exibida a janela do descritor Objeto Relacional. Expanda os objetos do banco de dados JcmSoft.mdf e selecione as tabelas Clientes, DetalhesPedidos, Pedidos e Produtos arrastando e soltando na janela Object Relational Designer;

As tabelas do banco de dados serão mapeadas como classes (campos como propriedades, procedures e funções como métodos)  e você terá no Descritor as classes que representam os objetos do banco de dados; Cada propriedade definida em cada objeto esta mapeada para cada coluna de cada tabela.

O arquivo JcmSoft.dbml contém o arquivo XML com informações sobre o leiaute das tabelas que foram mapeadas e também o descritor contendo as classes geradas pelo mapeamento. Após encerrar o mapeamento você já terá acesso aos recursos do LINQ To SQL com direito a intellisense completo das informações referente as tabelas mesmo sem conhecer nada sobre elas.

Se você observar as propriedades do DataContext gerado irá perceber que o nome dado ao contexto é JcmSoftDataContext e verá também a conexão com o banco de dados JcmSoft.mdf

O Banco de dados é mapeado em um objeto DataContext permitindo acesso a tabelas de forma transparente sem termos que nos preocupar com conexão. Teremos que apenas usar os recursos do LINQ To SQL.

O DataContext é o responsável por gerar as instruções SQL da sua linguagem de consulta e então mapear as linhas de dados retornadas a partir do seu banco de dados para objetos.

Neste momento temos o ambiente pronto para usar os recursos do LINQ. Na segunda parte do artigo eu vou criar os formulários de consulta e de menu da aplicação para em seguida criar o formulário de vendas onde serão realizadas as operações de atualizações das tabelas.

Aguarde: VB.NET 2008 - Protótipo para Sistema de Vendas com LINQ - II

Eu sei , é apenas VB .NET , mas eu gosto...


José Carlos Macoratti