Visual Basic 6 - Controle de Estoques com ADO - I
Vou criar um sistema para controle de estoques usando os conceitos da orientação a objeto (OOP) no VB 6.0. Não pense que será um sistema completo , não , o objetivo é mostrar como você pode iniciar o caminho das pedras , mesmo porque um sistema completo demandaria muito tempo e mesmo assim não atenderia a necessidade de todos os usuários.
Portanto nada de camarão , só o arroz com feijão básico. Nem por isto você deve torcer o nariz pois creio que muitos conceitos serão úteis , mesmo para os de conhecimento avançado.
Eu acho que estou me tornando repetitivo , mas quero começar chamando a atenção para a importância e o peso que a modelagem de dados têm em qualquer projeto ; se você fizer uma modelagem de dados errada , nada poderá salvar o seu código no futuro quando alguma alteração nas regras do negócio o levarem para um beco sem saída. Por isto a primeira coisa a fazer será fazer uma análise do seu projeto juntamente com o cliente para verificar suas reais necessidades em seguida fazer um protótipo para que o cliente tenha uma visão geral do sistema , assim ele poderá opinar com mais propriedade.
Muitos problemas irão se manifestar ao longo da vida de sua aplicação se o banco de dados for mal projetado , você pode ser surpreendido por um dos seguintes sintomas:
Vamos ao nosso projeto . Quais suas características ? Quais suas funcionalidades ? o que desejamos implementar ? Quais os objetos que vamos ter que criar ? Quanto nos vamos cobrar ?
1 - Definindo o projeto
Nosso sistema para controle de Estoques , daqui em diante chamado apenas de Estoque , irá envolver três entidades básicas (por questão de simplicidade ) :
Por conseqüência vamos criar três classes que representam estas entidades : A classe Cliente , a classe Produto e a classe Pedido.
Nosso sistema irá trabalhar com uma base de dados Access ( .mdb ) e o nome dado ao banco de dados será : Estoque.mdb e o acesso será feito usando a tecnologia ADO - ActiveX Data Object. Eu escolhi o Access por ser mais simples , mas , eu realmente não recomendo que você utilize o Access (veja o artigo em VB e SQLServer - O Acesso aos dados e a migração.); embora seja um excelente ferramenta , ele tem suas limitações . Prefira usar um banco de dados mais robusto como o SQL Server , Oracle ou DB2 . ( Veja como criar o banco de dados e as tabelas no SQL Server em : SQL SERVER - Usando a linguagem de definição de dados (DDL) ).
Nota : Outra boa opção para usar como banco de dados seria o MSDE da Microsoft. Leia artigo sobre o assunto em : Usando o MSDE com o Visual Basic
A seguir vamos criar no banco de dados Estoque.mdb as seguintes tabelas :
Podemos criar o banco de dados e as tabelas via código (ADO - Básico e Prático I ) , podemos também usar o Access e ganhar tempo. Veja artigo sobre como criar banco de dados e tabelas em : Criando Banco de Dados e Tabelas . Vamos usar o Access ; abra o Access e crie o banco de dados Estoque.mdb e a seguir a tabela clientes com a seguinte estrutura :
Nota : Se você não tem o Access nem o SQL Server veja como criar os arquivos no Visdata : Usando o Visual Data Manager para criar um banco de dados e tabelas
- A coluna CodigoCliente é a chave primária da tabela e
por isto não permite duplicação de código. - A coluna NomeCliente esta indexada com a opção duplicação não autorizada, assim não permitimos gravar clientes com o mesmo nome. |
Abaixo a estrutura da tabela Produtos :
- A coluna CodigoProduto é a chave primária da tabela e
por isto não permite duplicação de código. - A coluna NomeProduto esta indexada com a opção duplicação não autorizada, assim não permitimos gravar clientes com o mesmo nome. |
Agora a tabela Pedidos :
- A coluna CodigoPedido é a chave primária da tabela e
por isto não permite duplicação de código. - A coluna CodigoCliente esta indexada com a opção duplicação autorizada, pois poderemos ter vários pedidos para um mesmo cliente. |
Finalmente a tabela ItensPedidos :
- A coluna CodigoItemPedido é a chave primária da tabela e
por isto não permite duplicação de código. - A coluna CodigoPedido esta indexada com a opção duplicação autorizada, pois teremos o código de Pedido repetido diversas vezes para o mesmo cliente. - A coluna CodigoProduto esta indexada com a opção duplicação autorizada, pois poderemos num pedido o mesmo produto repetido diversas vezes |
Criando as classes do projeto
Se você ainda não tem experiência em tratar classes e objetos pode ficar um tanto perdido no início mas assim que assimilar os conceitos e a começar a pensar em objetos a programação OOP será uma coisa natural. No começo , para quem esta acostumado a programar nas linguagens que usam procedimentos , parece que a coisa não anda mas é só ter perseverança.
Nota: Leia os artigos sobre classes no Visual Basic nos seguintes links :
A primeira coisa que um programador com uma mentalidade procedural pensa quando tem que desenvolver um projeto é nas funções que deverá criar para realizar as tarefas do projeto já uma mentalidade OOP pensa em objetos e suas propriedades e métodos . No projeto Controle de estoques definimos 3 entidades . A entidade Clientes refere-se naturalmente aos nossos clientes então temos que definir a classe Cliente a partir da qual iremos instanciar o objeto Clientes assim poder acessar suas propriedades. Nossa classe deverá possuir propriedades e métodos. Quais as propriedades que um cliente possui ? Devemos pensar em nosso cliente como uma pessoa física ou jurídica . Abaixo as propriedades que iremos usar:
Nossa classe Cliente deverá permitir as operações de atualização , exclusão , inclusão e identificação dos clientes usando estas propriedades, por isso cada propriedade corresponde a uma coluna na tabela Clientes.
Vamos criar
a classe Cliente no Visual Basic. Abra um novo projeto
padrão do tipo ActiveX DLL dando a ele o nome de EstoqueDLL . Obs: Vamos criar as classes em uma DLL que conterá as regras de negócio. |
Para criar um procedimento Property , você deve estar na janela de código para a classe com a qual estiver operando. Selecione no menu Tools a opção Add Procedure. Isto irá abrir a janela Add Procedure. A seguir informe o nome do procedimento em - Name ; o tipo Property e o escopo - Scope igual Public. Ver abaixo:
Nota : Não esqueça de referencia a biblioteca ADO - Microsot Activex Data Object 2.x - no menu Project | References:
Na classe clientes vamos inserir o código conforme abaixo para cada campo da tabela e repetir para cada propriedade os procedimentos acima:
Option Explicit
Private
rsClientes As ADODB.Recordset Public Property Let
Nome(valor As String) Public Property Get
Nome() As String Public Property Let
Endereco(valor As String) Public Property Get
Endereco() As String Public Property Let
Cidade(valor As String) Public Property Get
Cidade() As String Public Property Let
Estado(valor As String) Public Property Get
Estado() As String Public Property Let
Cep(valor As String) Public Property Get
Cep() As String Public Property Let
Telefone(valor As String) Public Property Get
Telefone() As String Public Property Let
Telefone(valor As String) Public Property Get
Telefone() As String Public Property Let
CgcCic(valor As String) Public Property Get
CgcCic() As String Public Property Let
Inscricao(valor As String) Public Property Get
Inscricao() As String Public Property Let
Email(valor As String) Public Property Get
Email() As String Public Property Let
Ativo(valor As Boolean) Public Property Get
Ativo() As String |
Obs: O campo CodigoCliente não é gerenciado pela aplicação pois é um campo Autonumeração.
Após criar a classe incluímos as suas propriedades. Essas propriedades são as propriedades dos objetos criados a partir da classe. Cada objeto que você criar a partir da classe terá então o seu conjunto de propriedades, e essas propriedades permitirão ao usuário obter informação sobre o objeto. Existem duas maneiras atribuir uma propriedade a uma classe :
Definindo um variável pública ou privada
Usando o procedimento Property
Criando uma variável Pública - Você cria uma variável pública usando a declaração do enunciado da variável com a palavra Public, assim:
Public var1 as string ou Private var1 as string
A declaração do enunciado pode aparecer na secção Declarations do módulo da classe ou em qualquer procedure Sub na classe. Como uma variável pública é visível por toda aplicação assim que ela é criada , qualquer parte do programa pode alterar o valor da variável, e , isto pode lhe causar problemas , por isso este método de criação de variáveis deve ser evitado ao máximo e por isso nossas variáveis são do tipo private.
Usando o procedimento Property - Este é um método melhor de criar variáveis em classes, pois este procedimento fornece a interface para com as propriedades do objeto e ao mesmo tempo permite a escrita de código para verificar que os dados adequados estão sendo passados para classe. Isto protege as funções da classe de falharem quando receberem dados inadequados. Ele permite também criarmos propriedades somente-leitura. Existem três tipos de procedimentos Property disponíveis:
Procedure | Tipo | Função |
Property Let | Aceita o valor da uma propriedade (Property)de um programa que foi chamado | Usada para definir o valor de uma propriedade |
Property Get | Envia o valor da propriedade ao programa. | Usada para retornar o valor de um propriedade. |
Property Set | Caso especial. | Usado se o tipo de variável a ser definida for um objeto. |
O procedimento Property Let inclui um argumento ao procedimento. Este argumento é o valor que é passado de um programa pela propriedade . Você pode mudar o nome do argumento e pode definir o tipo da variável . O código do procedimento Property Let recebe o valor do argumento, realiza a validação(quando houver) e atribui o valor para uma variável privada no módulo de classe.
O procedimento Property Get permite ao seu programa receber o valor da propriedade . Isto é feito atribuindo-se o valor a ser retornado ao nome da propriedade.
Observe que cada propriedade possui um par Get/Let onde podemos atribuir e obter o valor de cada variável.
Vamos então definir agora o código da classe Produtos. Procedimento é o mesmo adotado para a classe Clientes : Segue abaixo o código da classe Produtos :
Option Explicit
Private
rsProdutos As ADODB.Recordset Public Property Get NomeProduto() As String NomeProduto = strNomeProduto End Property Public Property Let NomeProduto(valor As String) strNomeProduto = valor End Property Public Property Get QuantidadeProduto() As Single QuantidadeProduto = sgnQuantidadeProduto End Property Public Property Let QuantidadeProduto(valor As Single) sgnQuantidadeProduto = valor End Property Public Property Get AliquotaProduto() As Single AliquotaProduto = sgnAliquotaProduto End Property Public Property Let AliquotaProduto(valor As Single) sgnAliquotaProduto = valor End Property Public Property Get EstoqueMinimo() As Single EstoqueMinimo = sgnEstoqueMinimo End Property Public Property Let EstoqueMinimo(valor As Single) sgnEstoqueMinimo = valor End Property Public Property Get EstoqueMaximo() As Single EstoqueMaximo = sgnEstoqueMaximo End Property Public Property Let EstoqueMaximo(valor As Single) sgnEstoqueMaximo = valor End Property Public Property Get PrecoUnitario() As Currency PrecoUnitario = curPrecoUnitario End Property Public Property Let PrecoUnitario(valor As Currency) sgnPrecoUnitario = valor End Property Public Property Let Ativo(valor As Boolean) Ativo = valor End Property Public Property Get Ativo() As String Ativo = bAtivo End Property |
Obs: O campo CodigoProduto não é gerenciado pela aplicação pois é um campo Autonumeração.
Vamos , no embalo definir o código para a entidade Pedidos , conforme as regras mencionadas e da entidade ItensPedidos. O código de cada uma esta abaixo:
Código da classe Pedidos Código da classe Itens dos Pedidos
Option Explicit
Private rsPedidos
As ADODB.Recordset Public Property Get DataPedido() As Date DataPedido = datDataPedido End Property Public Property Let DataPedido(valor As Date) datDataPedido = valor End Property Public Property Get NumeroNotaFiscal() As Single NumeroNotaFiscal = sgnNumeroNotaFiscal End Property Public Property Let NumeroNotaFiscal(valor As Single) sgnNumeroNotaFiscal = valor End Property Public Property Get CodigoCliente() As Long CodigoCliente = lngCodigoCliente End Property Public Property Let CodigoCliente(valor As Long) lngCodigoCliente = valor End Property Public Property Get PrecoTotal() As Currency PrecoTotal = curPrecoTotal End Property Public Property Let PrecoTotal(valor As Currency) curPrecoTotal = valor End Property Public Property Get Frete() As Currency Frete = curFrete End Property Public Property Let Frete(valor As Currency) curFrete = valor End Property |
Option Explicit
Private
rsItensPedidos As ADODB.Recordset Public Property Get CodigoPedido() As Long CodigoPedido = lgnCodigoPedido End Property Public Property Let CodigoPedido(valor As Long) lgnCodigoPedido = valor End Property Public Property Get CodigoProduto() As Long CodigoProduto = lgnCodigoProduto End Property Public Property Let CodigoProduto(valor As Long) lgnCodigoProduto = valor End Property Public Property Get PrecoUnitario() As Currency PrecoUnitario = curPrecoUnitario End Property Public Property Let PrecoUnitario(valor As Currency) curPrecoUnitario = valor End Property Public Property Get QuantidadePedido() As Single QuantidadePedido = sgnQuantidadePedido End Property Public Property Let QuantidadePedido(valor As Single) sgnQuantidadePedido = valor End Property Public Property Get Desconto() As Single Desconto = sgnDesconto End Property Public Property Let Desconto(valor As Single) sgnDesconto = valor End Property |
Até agora só tivemos muito trabalho braçal , onde apenas definirmos as propriedades para cada item de cada entidade. A seguir vamos ver quais métodos serão necessários para que possamos implementar todas as funcionalidades no projeto.
Pode parecer pouca coisa mas lembre-se que as propriedades são a vida da classe e que existem duas maneiras , no VB 6, para exibir as propriedades nas classes definidas:
Acompanhe a continuação do artigo em - VB6 - Controle de Estoques com ADO - II...
Veja também outros sistemas similares no : Super DVD Visual Basic
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET