Visual Basic 6 - Acesso a base de Dados via D.A.O.
Vamos definir uma tabela com o nome de fornecedores que estará armazenada no banco de dados Controle.mdb e que possuirá a seguinte estrutura:
---------------------------------------------------------
nome do campo Tipo de Dados Tamanho do Campo
---------------------------------------------------------
nome Caracter 30
cgc Caracter 18
endereco Caracter 30
cep Caracter 09
uf Caracter 02
ddd Caracter 04
fone Caracter 10
ramal Caracter 04
fax Caracter 10
contato Caracter 20
produto Caracter 20
---------------------------------------------------------
1-Os campos Nome, CGC e Endereço não podem ser Nulos, ou seja
são de preenchimento obrigatório.
2-Defina um índice para o campo nome desativando as
opções: Unique, Primary index. e ativando a opção Requerid
Conteúdo
Temos abaixo (figura 1.0) a tela principal de nossa aplicação:
![]() figura 1.0 |
Para montar o formulário acima descrito observe os seguintes passos:
1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1
como Fornecedores.
2-Adicione ao Form1 os objetos e configure as propriedades conforme
a tabela 1.0 abaixo :
Tabela 1.0 - Objetos e propriedades do formulário Fornecedores
----------------------------------------------------------------------------
Objeto Propriedade Configuração
----------------------------------------------------------------------------
Form Name Fornecedores
Caption "Cadastro de Fornecedores"
----------------------------------------------------------------------------
TextBox Name Nome
Maxlength 30
----------------------------------------------------------------------------
MaskedBox Name CGC
Mask ##.###.###/###-##
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
TextBox Name Endereco
Maxlength 30
----------------------------------------------------------------------------
MaskedBox Name Cep
Mask #####-###
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
TextBox Name UF
MaxLength 2
----------------------------------------------------------------------------
TextBox Name DDD
MaxLength 4
----------------------------------------------------------------------------
MaskedBox Name Fone
Mask ####-##-##
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
TextBox Name Ramal
MaxLength 4
----------------------------------------------------------------------------
MaskedBox Name Fax
Mask ####-##-##
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
TextBox Name Contato
MaxLength 20
----------------------------------------------------------------------------
TextBox Name Produto
MaxLength 20
----------------------------------------------------------------------------
Frame Caption ""
Name Frame1
----------------------------------------------------------------------------
CommandButton Name Inclui
Caption "&Inclui"
---------------------------------------------------------------------------
CommandButton Name Altera
Caption "&Altera"
---------------------------------------------------------------------------
CommandButton Name Exclui
Caption "&Exclui"
---------------------------------------------------------------------------
CommandButton Name Grava
Caption "&Grava"
---------------------------------------------------------------------------
CommandButton Name Cancela
Caption "&Cancela"
---------------------------------------------------------------------------
Frame Caption "Telefone/Contato/Produto"
Name Frame2
---------------------------------------------------------------------------
(*)CommandButton Name Command1(0)
Caption "|<" CommandButton Name Command1(1) Caption "<" CommandButton Name Command1(2) Caption ">"
---------------------------------------------------------------------------
CommandButton Name Command1(3)
Caption ">|"
---------------------------------------------------------------------------
(**)Label Caption **
AutoSize **
---------------------------------------------------------------------------
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo
tipo, dotados de um índice identificador.
(**)Todos os controles Label possuem a propriedade AutoSize=True e
Caption sendo igual ao nome do respectivo controle TextBox,MaskEdbox
ou CommandButton.
OBS - Você tem que fazer referência a DAO para poder criar seus objetos database.
Para referenciar a DAO em seu projeto :
Veja a figura abaixo.
|
|
|
|
1-Selecione References no Menu Project e |
2- Ative a Microsoft DAO 3.5 Object Library |
Para inserir as linhas de código basta clicar duas vezes no controle correspondente do formulário.
1-Código da seção General Declarations do formulário
Private base As Database Private tabela As Recordset Private atualiza As Integer Define as variáveis que serão visíveis em todo o formulário.
2-Código do evento Load do formulário.
Private Sub Form_Load()
Dim dbname As String
On Error GoTo loaderror
dbname = "\controle.mdb"
Set base = DBEngine.Workspaces(0).OpenDatabase(app.path & dbname)
Set tabela = base.OpenRecordset("fornecedores", dbOpenTable)
If tabela.RecordCount > 0 Then
mostra_reg
Else
MsgBox "O arquivo está vazio ... ", vbExclamation
altera.Enabled = False
exclui.Enabled = False
grava.Enabled = False
cancela.Enabled = False
End If
Exit Sub
loaderror:
MsgBox Err.Description, vbCritical
End
End Sub
3-Código associado aos botões de comando para
movimentar os registros.
Private Sub Command1_Click(Index As Integer)
Const MOVE_FIRST = 0
Const MOVE_PREVIOUS = 1
Const MOVE_NEXT = 2
Const MOVE_LAST = 3
If (tabela.EditMode = dbEditAdd) Or _
(tabela.EditMode = dbEditInProgress) Then
cancela_Click
Exit Sub
End If
Select Case Index
Case MOVE_FIRST
tabela.MoveFirst
Case MOVE_PREVIOUS
tabela.MovePrevious
If tabela.BOF Then tabela.MoveFirst
Case MOVE_NEXT
tabela.MoveNext
If tabela.EOF Then tabela.MoveLast
Case MOVE_LAST
tabela.MoveLast
End Select
mostra_reg
End Sub
4-Código associado ao botão incluir dados.
Private Sub inclui_Click()
tabela.AddNew
limpa_reg
inclui.Enabled = False
altera.Enabled = False
grava.Enabled = True
cancela.Enabled = True
exclui.Enabled = False
nome.SetFocus
End Sub
5-Código associado ao botão excluir dados.
Private Sub exclui_Click()
If MsgBox("Confirma Exclusao ", vbYesNo, tabela![nome]) = vbYes Then
tabela.Delete
If Not tabela.EOF Then
tabela.MoveNext
ElseIf Not tabela.BOF Then
tabela.MovePrevious
End If
mostra_reg
End If
End Sub
6-Código associado ao botão Alterar dados.
Private Sub altera_Click() tabela.Edit altera.Enabled = False grava.Enabled = True cancela.Enabled = True exclui.Enabled = False inclui.Enabled = False nome.SetFocus End Sub 7-Código associado ao botão Gravar dados.
Private Sub grava_Click()
If (tabela.EditMode = dbEditAdd) Or (tabela.EditMode = dbEditInProgress) Then
atualiza = True
grava_reg
If atualiza Then
tabela.Update
inclui.Enabled = True
exclui.Enabled = True
altera.Enabled = True
grava.Enabled = True
cancela.Enabled = True
End If
End If
End Sub
8-Código associado ao botão Cancelar.
Private Sub cancela_Click()
Dim marca As Variant
marca = tabela.Bookmark
If (tabela.EditMode = dbEditAdd) Or _
(tabela.EditMode = dbEditInProgress) Then
tabela.CancelUpdate
tabela.Bookmark = marca
mostra_reg
End If
inclui.Enabled = True
exclui.Enabled = True
altera.Enabled = True
grava.Enabled = True
cancela.Enabled = True
End Sub
9-Procedimento de evento para gravar os registros.
Public Sub grava_reg()
If nome = Empty Then
MsgBox "O nome é obrigatorio ! "
nome.SetFocus
atualiza = False
Exit Sub
End If
If cgc = Empty Then
MsgBox "O CGC tambem é obrigatorio ! "
cgc.SetFocus
atualiza = False
Exit Sub
End If
If endereco = Empty Then
MsgBox "O endereco é obrigatorio "
endereco.SetFocus
atualiza = False
Exit Sub
End If
tabela![nome] = nome
tabela![cgc] = cgc
tabela![endereco] = endereco
tabela![cep] = IIf(IsNull(cep), "", cep)
tabela![uf] = IIf(IsNull(uf), "", uf)
tabela![ddd] = IIf(IsNull(ddd), "", ddd)
tabela![fone] = IIf(IsNull(fone), "", fone)
tabela![ramal] = IIf(IsNull(ramal), "", ramal)
tabela![fax] = IIf(IsNull(fax), "", fax)
tabela![contato] = IIf(IsNull(contato), "", contato)
tabela![produto] = IIf(IsNull(produto), "", produto)
End Sub
Dica: Poderiamos usar a seguinte notação abaixo para diminuir o código:
Ao invés de -> tabela![cep] = IIf(IsNull(cep), "", cep)
Fazemos -> tabela![cep] = "" & cep
ou -> tabela![valor_numérico] = 0 & [valor_numerico]
isto também evitaria a mensagem de erro para campos com Null.
10-Procedimento de Evento para mostrar os registros.
Public Sub mostra_reg()
If Not IsNull(tabela![nome]) Then
nome = tabela![nome]
Else
nome = ""
End If
If Not IsNull(tabela![cgc]) Then
cgc = tabela![cgc]
Else
cgc = ""
End If
If Not IsNull(tabela![endereco]) Then
endereco = tabela![endereco]
Else
endereco = ""
End If
If Not IsNull(tabela![cep]) Then
cep = tabela![cep]
Else
cep = ""
End If
If Not IsNull(tabela![uf]) Then
uf = tabela![uf]
Else
uf = ""
End If
If Not IsNull(tabela![ddd]) Then
ddd = tabela![ddd]
Else
ddd = ""
End If
If Not IsNull(tabela![fone]) Then
fone = tabela![fone]
Else
fone = ""
End If
If Not IsNull(tabela![ramal]) Then
ramal = tabela![ramal]
Else
ramal = ""
End If
If Not IsNull(tabela![fax]) Then
fax = tabela![fax]
Else
fax = ""
End If
If Not IsNull(tabela![contato]) Then
contato = tabela![contato]
Else
contato = ""
End If
If Not IsNull(tabela![produto]) Then
produto = tabela![produto]
Else
produto = ""
End If
End Sub
11-Procedimento de Evento para limpar os controles .
Public Sub limpa_reg()
nome = ""
cgc = ""
endereco = ""
cep = ""
uf = ""
ddd = ""
fone = ""
ramal = ""
fax = ""
contato = ""
produto = ""
End Sub
Dica: Se tivéssemos utilizado um 'control array' poderíamos ter usado um laço For/Next para diminuir o código.
Ex: for x=0 to 5
text1(x).text=""
next
Ou , de forma mais elegante, poderíamos criar uma rotina genérica:
Public Sub LimpaControles(tela as Form)
Dim i as integer
For i=0 to tela.controls-1
if TypeOf tela.Controls(i) is TextBox then
tela.Controls(i).text=""
endif
Next
End Sub
11-Rotina associada a caixa de texto vinculada ao campo
Ramal .
Private Sub ramal_KeyPress(KeyAscii As Integer)
If KeyAscii <48 Or KeyAscii> 57 Then KeyAscii = 0
End Sub
12-Rotina associada a caixa de texto vinculada ao campo UF .
Private Sub uf_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub 13-Código associado a opção localizar do menu .
Private Sub mnulocaliza_Click()
Dim marca As Variant
Dim busca As String
marca = tabela.Bookmark
tabela.Index = "nome"
busca = InputBox("Informe o nome do fornecedor : ", "Localiza")
If busca = Empty Then
Exit Sub
Else
tabela.Seek "=", busca
End If
If Not tabela.NoMatch Then
mostra_reg
Else
MsgBox "Fornecedor não localizado ", vbExclamation, "Localiza"
tabela.Bookmark = marca
End If
End Sub
14-Código associado a opção Sair do menu.
Private Sub mnusair_Click() End End Sub
15-Função para Validar o CGC.
Podemos implementar nosso sistema com uma função que valide o número do CGC do Cliente. A função para validação pode ser colocada no evento Lostfocus do controle Maskedbox CGC chamando a função Calculacgc e passando como parâmetro o número do CGC digitado da seguinte forma:
Public Function ValidaCGC(CGC as string) as Boolean if len(cgc) < > 14 then validacgc = False Exit function endif if calculacgc(left(cgc,12)) <> mid(cgc,13,1) then validacgc=False Exit Function endif if calculacgc(left(cgc,13)) <> mid(cgc,14,1) then validacgc=False Exit Function endif validacgc=True End Function |
A função que faz o calculo do dígito verificador é a seguinte:
Public Function CalculaCGC(Numero as string) as string dim i as integer dim prod as integer dim mult as integer dim digito as integer if not isnumeric(numero) then calculacgc="" Exit funcion endif mult=2 for i=len(numero) to 1 step - 1 prod=prod+ val(mid(numero),i,1)) * mult mult = iif(mult=9 , 2, mult+1) next digito= 11 - int(prod mod 11) digito= iif(digito=10 or digito=11 , 0 , digito) calculacgc=trim(str(digito)) End Function |
Conteúdo
|
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
![]()