- Utilizando a SQL
![]() |
Utilização da SQL - Structured Query Language. |
|
Veja também o curso de SQL neste link :
Vamos definir uma tabela com o nome de agenda que estará armazenada no banco de dados Controle.mdb e que possuirá a seguinte estrutura:
------------------------------------------------------------------------------------------------------------
nome do campo Tipo de Dados Tamanho do Campo
---------------------------------------------------------
sobrenome Caracter 30
nome Caracter 30
telefone Caracter 13
nascimento date --
endereco Caracter 30
cep Caracter 10
uf Caracter 02
e_mail Caracter 80
pais Caracter 20
obs Caracter 100
foto Caracter 50
---------------------------------------------------------
1-Os campos Sobrenome, nome e nascimento não podem ser Nulos, ou seja
são de preenchimento obrigatório.
2-Defina um índice para o campo sobrenome desativando as
opções: Unique, Primary index. e ativando a opção Requerid
3-Você deve criar e armazenar no banco de dados Controle.mdb as seguintes consultas SQL:
(Para isso utilize o Microsoft Access ou o Data Manager)
1-Consulta Inclusão :
INSERT INTO agenda ( sobrenome, nome, telefone, nascimento, endereco, cep, uf, e_mail, pais, obs, foto )
SELECT parsobrenome AS Expr1, parnome AS Expr2, partelefone AS Expr3, parnascimento AS Expr4, parendereco
AS Expr5, parcep AS Expr6, paruf AS Expr7, pare_mail AS Expr8, parpais AS Expr9, parobs AS Expr10,
parfoto AS Expr11;
2-Consulta Atualização:
UPDATE Agenda SET Agenda.sobrenome = parsobrenome, Agenda.nome = parnome, Agenda.telefone = partelefone,
Agenda.nascimento = parnascimento, Agenda.endereco = parendereco, Agenda.cep = parcep, Agenda.uf = paruf,
Agenda.e_mail = pare_mail, Agenda.pais = parpais, Agenda.obs = parobs, Agenda.foto = parfoto WHERE
((Agenda.sobrenome=[parsobrenome]));
3-Consulta Exclusão:
DELETE * FROM agenda WHERE sobrenome=parsobrenome;
Conteúdo
Desenhando a interface com o usuário.
Temos abaixo (figura 1.0) a tela principal de nossa aplicação em tempo de projeto:
![]() figura 1.0 |
Observe o uso dos Controles: -Image -CommomDialog -CrystalReport -ComboBox -Picture |
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 Agenda.
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 Agenda
----------------------------------------------------------------------------
Objeto Propriedade Configuração
----------------------------------------------------------------------------
Form Name Agenda
Caption "Agenda"
----------------------------------------------------------------------------
TextBox Name Sobrenome
Maxlength 30
----------------------------------------------------------------------------
textBox Name Nome
Maxlength 30
----------------------------------------------------------------------------
TextBox Name Telefone
Maxlength 15
----------------------------------------------------------------------------
TextBox Name Nascimento
----------------------------------------------------------------------------
TextBox Name Endereco
MaxLength 30
----------------------------------------------------------------------------
TextBox Name Cep
MaxLength 10
----------------------------------------------------------------------------
ComboBox Name cmbestados
----------------------------------------------------------------------------
TextBox Name e_mail
MaxLength 80
----------------------------------------------------------------------------
ComboBox Name cmbpaises
----------------------------------------------------------------------------
TextBox Name foto
MaxLength 80
----------------------------------------------------------------------------
TextBox Name obs
Multiline true
----------------------------------------------------------------------------
CommandButton Name Incluir
Caption "&Incluir"
---------------------------------------------------------------------------
CommandButton Name Alterar
Caption "&Alterar"
---------------------------------------------------------------------------
CommandButton Name Excluir
Caption "&Excluir"
---------------------------------------------------------------------------
CommandButton Name Imprime
Caption "Im&prime"
---------------------------------------------------------------------------
CommandButton(#) Name Gravar
Caption "&Gravar"
---------------------------------------------------------------------------
CommandButton(#) Name Cancelar
Caption "&Cancelar"
---------------------------------------------------------------------------
CommonDialog Name CommonDialog1
---------------------------------------------------------------------------
CrystalReport Name CrystalReport1
---------------------------------------------------------------------------
Picture Name Picture1
Visible True
BackColor azul
---------------------------------------------------------------------------
Picture Name Picture2
Visible False
BackColor azul
---------------------------------------------------------------------------
Image Name Image1
Stretch True
---------------------------------------------------------------------------
CommandButton Name foto
Caption Inclui foto
---------------------------------------------------------------------------
CommandButton Name primeiro
Caption "|<"
---------------------------------------------------------------------------
CommandButton Name ultimo
Caption ">|"
---------------------------------------------------------------------------
(**)Label Caption **
AutoSize **
---------------------------------------------------------------------------
(**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivo controle TextBox,MaskEdbox ou CommandButton.
(#)Estes botões de comando são colocados no controle picture2 e os demais no controle picture1.
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
Option Explicit Public banco As Database Public area As Workspace Public tabela As Recordset Public consulta As QueryDef Public atualiza As Boolean Public alterar As Boolean Public fotos As String Public marca As Variant
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()
Set area = DBEngine.Workspaces(0)
Set banco = area.OpenDatabase("C:\vb16\CONTROLE.MDB")
Set tabela = banco.OpenRecordset("Agenda", dbOpenTable)
tabela.Index = "sobrenome"
enche_combo cmbestados, "estados", "uf"
enche_combo cmbpaises, "paises", "pais"
If tabela.RecordCount = 0 Then
MsgBox "O arquivo esta vazio ... vamos comecar a trabalhar..."
Else
tabela.MoveFirst
End If
mostra_reg
End Sub
3-Código da procedure para mostrar os registros.
Public Sub mostra_reg()
Dim nomefoto As String
If Not IsNull(tabela![sobrenome]) Then
sobrenome = tabela![sobrenome]
Else
sobrenome = ""
End If
If Not IsNull(tabela![nome]) Then
nome = tabela![nome]
Else
nome = ""
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
cmbestados.Text = tabela![uf]
Else
cmbestados.Text = ""
End If
If Not IsNull(tabela![nascimento]) Then
nascimento = tabela![nascimento]
Else
nascimento = ""
End If
If Not IsNull(tabela![telefone]) Then
telefone = tabela![telefone]
Else
telefone = ""
End If
If Not IsNull(tabela![pais]) Then
cmbpaises.Text = tabela![pais]
Else
cmbpaises.Text = ""
End If
If Not IsNull(tabela![e_mail]) Then
e_mail = tabela![e_mail]
Else
e_mail = ""
End If
If Not IsNull(tabela![obs]) Then
obs = tabela![obs]
Else
obs = ""
End If
If Not IsNull(tabela![foto]) Then
nomefoto = Trim(tabela![foto])
Image1.Picture = LoadPicture(nomefoto)
Else
nomefoto = ""
Image1.Picture = LoadPicture("")
End If
Label11.Caption = "Reg.: " & tabela.RecordCount
End Sub
4-Código da procedure para preencher as caixas de combinação.
Private Sub enche_combo(combo As Control, data As String, campo As String)
Dim arqtemp As Recordset
combo.Clear
Set arqtemp = banco.OpenRecordset(data, dbOpenSnapshot)
Do Until arqtemp.EOF
combo.AddItem arqtemp(campo)
arqtemp.MoveNext
Loop
arqtemp.Close
combo.ListIndex = 0
End Sub
5-Código da procedure para limpar as caixas de texto.
Sub limpa_reg(janela As Form)
Dim i As Integer
For i = 0 To janela.Controls.Count - 1
If TypeOf janela.Controls(i) Is TextBox Then
janela.Controls(i).Text = ""
End If
Next i
End Sub
6-Código associado ao botão Incluir.
Private Sub inclui_Click()
alterar = False
marca = tabela.Bookmark
limpa_reg frmagenda
foto.Visible = True
Picture1.Visible = False
Picture2.Visible = True
Image1.Picture = LoadPicture("")
sobrenome.SetFocus
End Sub
7-Código associado ao botão Alterar.
Private Sub altera_Click() alterar = True sobrenome.Enabled = False nome.SetFocus foto.Visible = True Picture2.Visible = True Picture1.Visible = False End Sub
8-Código associado ao botão Excluir.
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
9-Código associado ao botão Gravar.
Private Sub grava_Click()
atualiza = True
If alterar Then
grava_reg 2
alterar = False
sobrenome.Enabled = True
Else
grava_reg 1
End If
If atualiza Then
foto.Visible = False
Picture1.Visible = True
Picture2.Visible = False
End If
End Sub
10-Código associado ao botão Cancelar.
Private Sub cancela_Click()
tabela.Bookmark = marca
mostra_reg
foto.Visible = False
Picture1.Visible = True
Picture2.Visible = False
sobrenome.Enabled = True
End Sub
11-Código associado ao botão Imprime.
Private Sub imprime_Click()
CrystalReport1.Destination = 0
CrystalReport1.ReportFileName = "c:\Controle\agenda.rpt"
CrystalReport1.Action = 1
End Sub
12-Código associado ao botão Inclui Foto.
Você pode armazenar as imagens no seu banco de dados mas isto pode lhe trazer problemas futuros. Se sua base de dados aumentar muito , as imagens armazenadas irão impactar o velocidade do seu projeto.( Lembre-se também que o tamanho máximo para um mdb é de 1 Gigabyte)(se não me engano!) |
Private Sub foto_Click()
Dim filter As String
fotos = ""
filter = "Arquivos BMP (*.BMP)|*.bmp|Todos os arqs.|*.*"
CommonDialog1.filter = filter
CommonDialog1.DefaultExt = "BMP"
CommonDialog1.ShowOpen
fotos = CommonDialog1.filename
If Not fotos = Empty Then
Image1.Picture = LoadPicture(fotos)
Else
Image1.Picture = LoadPicture("")
End If
End Sub
13-Código associado ao botão primeiro(|<)
Private Sub primeiro_Click() tabela.MoveFirst mostra_reg End Sub
14-Código associado ao botão anterior(<).
Private Sub anterior_click()
tabela.MovePrevious
If tabela.BOF Then
tabela.MoveFirst
End If
mostra_reg
End Sub
15-Código associado ao botão proximo(>).
Private Sub proximo_click()
tabela.MoveNext
If tabela.EOF Then
tabela.MoveLast
End If
mostra_reg
End Sub
16-Código associado ao botão ultimo(>|).
Private Sub ultimo_click() tabela.MoveLast mostra_reg End Sub
17-Código da procedure para gravar os dados nos arquivos.
Public Sub grava_reg(operacao As Integer)
If sobrenome = Empty Then
MsgBox "O sobrenome/Apelido é obrigatorio ! "
sobrenome.SetFocus
atualiza = False
Exit Sub
End If
If nome = Empty Then
MsgBox "O nome tambem é obrigatorio ! "
nome.SetFocus
atualiza = False
Exit Sub
End If
If endereco = Empty Then
MsgBox "O endereco é obrigatorio "
endereco.SetFocus
atualiza = False
Exit Sub
End If
If nascimento = Empty Then
MsgBox "A data de nascimento é obrigatória "
nascimento.SetFocus
atualiza = False
Exit Sub
End If
If operacao = 1 Then
Set consulta = banco.QueryDefs("insagenda")
Else
Set consulta = banco.QueryDefs("upagenda")
End If
area.BeginTrans
consulta("parsobrenome") = sobrenome
consulta("parnome") = nome
consulta("parendereco") = endereco
consulta("parnascimento") = CDate(Format(nascimento, "d-m-yy"))
consulta("parcep") = IIf(IsNull(cep), "", cep)
consulta("paruf") = IIf(IsNull(cmbestados.Text), "", cmbestados.Text)
consulta("parpais") = IIf(IsNull(cmbpaises.Text), "", cmbpaises.Text)
consulta("partelefone") = IIf(IsNull(telefone), "", telefone)
consulta("pare_mail") = IIf(IsNull(e_mail), "", e_mail)
consulta("parobs") = IIf(IsNull(obs), "", obs)
consulta("parfoto") = IIf(IsNull(fotos), "", fotos)
consulta.Execute
area.CommitTrans
End Sub
17-Código associado a opção sair do menu.
Private Sub mnusair_Click()
End
End Sub
18-Código associado ao evento pressionar tecla da caixa de texto e_mail.
Private Sub e_mail_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(LCase(Chr(KeyAscii)))
End Sub
19-Código associado ao evento perder o foco da caixa de texto sobrenome.
Private Sub sobrenome_LostFocus()
'If sobrenome = Empty Then
' Exit Sub
'End If
tabela.Seek "=", sobrenome
If tabela.NoMatch Then
Exit Sub
End If
mostra_reg
foto.Visible = False
Picture2.Visible = False
Picture1.Visible = True
End Sub
20-Código associado ao evento perder o foco da caixa de texto nascimento.
O evento Lostfocus deve ser usado com muito cuidado para não se ter dores de cabeça!!
Private Sub nascimento_LostFocus()
If Not IsDate(Format(nascimento, "dd-mm-yy")) Then
MsgBox "Data invalida, formato deve ser dd-mm-yy - Ex: 02-07-78 "
nascimento.SetFocus
Else
nascimento.Text = Format(nascimento, "dd-mm-yy")
End If
End Sub
Adios, ...