> ## Utilizando a SQL

##### Conteúdo

- Estrutura da tabela.
- Interface com o usuário
- Codigo da Aplicação.

### 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:

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