Utilizando a SQL

 

Conteúdo
 

Definicao da estrutura da tabela.

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:
 
Formulário Agenda
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.
Conteúdo

Codificando a sua aplicação.

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
16-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
17-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
18-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
19-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, ...
Conteúdo

Retorna