Visual Basic 6 - Controle de mensalidades
Em tempos de VB.NET , ASP.NET , Java , pode parecer um tanto ultrapassado falar sobre DAO - Data Access Object - (lembra dela ?). |
Pois eu não me importo com isto , pois sei que nada deve ser descartado , um dia , quando você menos espera , pode precisar !!!.
Este artigo é para os que estão iniciando e tem dúvidas em como usar o Data Control e o DBGrid. Então se você esta achando este artigo muito chato ou muito simples , lembre-se que o caminho por qual você já passou outros ainda estão passando.
Neste artigo eu vou mostrar como você pode criar uma aplicação simples , muiito simples , onde vamos gerar mensalidades para um pagamento determinado. Por exemplo , você tem um escola ou academia e quer cadastrar o seu cliente e efetuar o cálculo e geração das mensalidades que para o cliente ; depois é só ir dando baixa acusando o recebimento.(Eu não implementei uma rotina especifica para isto ; logo você vai ter que fazer isto diretamente no Grid)
A interface é simples e eu vou estar usando os controles : Data Control , DBGrid e o acesso a um banco de dados Acces com DAO.
A estrutura de cada tabela é a seguinte :(você pode ajustar o projeto com mais informações)
<-Tabela Clientes | <-tabela Parcelas |
Vamos usar dois formulários no projeto : o formulário de cadastro para os clientes e o formulário que gera as mensalidades para cada cliente. Abaixo o layout de cada um :
O formulário que gera e controla as mensalidades | O formulário de cadastro de clientes |
Funciona assim: O formulário de controle de mensalidades é carregado ; para cadastrar um cliente basta clicar no botão com o sinal de (+) . A seguir para gerar as mensalidades para aquele cliente informe o valor do pagamento e o número de parcelas; clique no botão -Gerar Mensalidades e , pronto ! ; você verá as mensalidades geradas no Grid. O projeto exibe as mensalidades para cada cliente , basta navegar pelos registro da tabela clientes. O código do projeto comentado segue abaixo:
Nota : Você deve vincular o controle DBGrid ao Data Control - Data2 , definindo a propriedade DataSource do DBGrid igual a Data2 na janela de propriedades do DBGrid.
1- código da seção - General Declarations do formulário ; define as variáveis de acesso aos dados.
Dim
db As Database Dim clientes As Recordset Dim parcelas As Recordset |
2- Código do evento Click do botão (+) que permite : incluir , excluir novos clientes na base de dados :
Private
Sub cmdcadastrar_Click() If MsgBox("Deseja incluir um novo Cliente ? ", vbYesNo, "Buscar Cliente") = vbYes Then frmcadclientes.Show vbModal Else Exit Sub End If End Sub |
3- Código do evento Load do formulário - frmmensalidades - define o caminho do banco de dados - Vendas.mdb - e as tabelas : clientes e parcleas. Oculta as colunas 0 , 1 do DBGrid. (estas colunas são respectivamente : CodigoParcelas e Codigo.). Há também um tratamento de erros bem básico para o caso das tabelas estarem sendo usadas por outro usuário.
Private Sub Form_Load() On Error GoTo trata_erro Set db = OpenDatabase(App.Path & "\vendas.mdb") Set clientes = db.OpenRecordset("clientes") Set parcelas = db.OpenRecordset("parcelas") Data1.DatabaseName = App.Path & "\vendas.mdb" Data1.RecordSource = "clientes" Data2.DatabaseName = App.Path & "\vendas.mdb" Data2.RecordSource = "parcelas" DBGrid1.Columns(0).Visible = False DBGrid1.Columns(1).Visible = False DBGrid1.Columns(4).Visible = True Exit Sub trata_erro: If Err.Number = 3261 Then MsgBox " Erro : " & Err.Number & " : a tabela esta bloqueada . Verifique ! ", vbCritical, "Dados bloqueados" Else MsgBox Err.Number & " - " & Err.Description End If End Sub End Sub |
4- O código do evento Click do botão - Gera Mensalidades - :
Private Sub cmdgeramensalidades_Click() Dim mes As Integer Dim ano As Integer Dim data As String mes = Format(Now, "mm") ano = Format(Now, "yy") For i = 1 To Val(txtnumeroparcelas.Text) mes = mes + 1 If mes > 12 Then mes = 1 ano = ano + 1 End If dia1 = Format(Now, "dd") dia = Verifica_dia(dia1, mes) data = dia & "/" & Format(mes, "00") & "/" & Format(ano, "00") parcela = CCur(txtvalor.Text) / Val(txtnumeroparcelas.Text) Data2.Recordset.AddNew Data2.Recordset.Fields(1) = CLng(txtcodigo.Text) Data2.Recordset.Fields(2) = Format(CDate(data), "dd/mm/yy") Data2.Recordset.Fields(3) = CCur(parcela) Data2.Recordset.Fields(4) = False Data2.Recordset.Update Next End Sub |
- Eu obtenho o mes e
ano atual e a seguir inicio um laço for/next para o
número de parcelas - acrescento um ao mês e verifico se o mês é igual a 12 se for então passo p/ o ano seguinte - a função verifica_dia ajusta o valor correto do dia quando o mesmo for igual a 31. - a data é formatada e a parcela calculada (eu não me preocupei com arredondamentos). - depois é só incluir os dados no recordset - eles serão vistos no grid de imediato |
5- O código abaixo é muito importante , ele é posto no evento Reposition do Data Control - Data1 - que esta associado a tabela clientes. Toda vez que mudarmos de registro na tabela clientes , estamos mudando a fonte de dados associada ao Data Control - Data2 - usando a variável txtcodigo . Como o Data2 esta associado ao DBGrid1 , o Grid exibirá os dados desta seleção.
Private
Sub Data1_Reposition() If txtcodigo.Text <> "" Then Data2.RecordSource = "Select * from parcelas where codigo= " & CLng(txtcodigo.Text) Data2.Refresh End If End Sub |
6- Abaixo temos a rotina associada ao evento KeyPress do formulário que permite a simulação da tecla TAB quando usuário teclar ENTER . Basta incluí-la no formulário e definir a propriedade KeyPreview do mesmo como sendo igual a True ; fazendo assim funciona para todos os controles TextBox do formulário.
Private Sub Form_KeyPress(KeyAscii As Integer) 'Esse código permite a mudança de quadro de texto através do Enter If KeyAscii = 13 Then 'Se o tipo do controle ativo for TextBox If TypeOf Screen.ActiveControl Is TextBox Then 'Simula o pressionamento da tecla TAB SendKeys "{tab}" 'A linha a seguir evita ouvir um bip KeyAscii = 0 End If End If End Sub |
7- Finalmente a função - Verifica_dia . Ela verifica o dia do mês para cada mês , se o dia for igual a 31 , ela atribui o valor correto para os meses seguintes das mensalidades .(O mês de fevereiro talvez requere-se um tratamento mais sofisticado para o caso de ano bissexto ).Lembre-se que as funções sempre retornam um valor. No caso eu estou retornando o dia do mês já ajustado.
Nota: No VB 6 o primeiro índice de um array é igual a zero , assim : diasDoMes(0) é igual a 31 , etc.. É por isto que eu subtraio 1 do mês atual.
Public
Function Verifica_dia(dia, mes) Dim diasDoMes As Variant dia = Val(dia) diasDoMes = Array(31, 28, 30, 30, 31, 30, 31, 30, 30, 31, 30, 31) If dia = 31 Then Verifica_dia = diasDoMes(mes - 1) Else Verifica_dia = dia End If End Function |
Executando o projeto terermos as seguintes telas para a geração de mensalidades para um cliente já cadastrado:
Como você pode ver , usando uma interface simples e alguns controles vinculados básicos podemos fazer em minutos um sisteminha para resolver nosso problema...
O sistema esta completo no Super DVD Visual Basic.
No Super DVD Visual Basic você encontra recursos de aprendizado para a linguagem Visual Basic e mais de 100 programas com o código fonte aberto para estudo. Confira !
Até mais...
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 ? |
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