# CÓDIGO DA APLICAÇÃO

    Objeto Controle de Dados(Data Control)

    Lembre-se que você esta usando um banco de dados do Microsoft Access , então:

    Para o objeto Data voce deve configurar as propriedades como abaixo:

    1- A propriedade Connect deve estar como: Access.

    2- A propriedade Name do controle deve ser: DtaCli.

    3- O DatabaseName é o nome do seu arquivo de banco de dados, no caso: Controle.mdb

    4- O RecordSource poderá ser uma tabela ou uma instrução SQL, no seu caso , é a
       tabela Clientes do banco de dados Controle.mdb.

    5- A propriedade RecordSetType deve ser definida como 0-Table.
       Por isso criamos o índice com o campo código, para utilizar com o método Seek do
       Recordset Tabela. Se recordSetType fosse definido como 1-Dynaset> ou 2-Snapshot
       não poderiamos usar o método Seek e sim o FindFirst, FindNext, FindLast, etc.

    obs-Voce poderia ter incluido o código no evento Load do seu formulário
        configurando as propriedades discutidas acima da seguinte forma:

        Sub Form_load
          dtacli.Databasename="C:\Controle\Controle.mdb"
          dtacli.Recordsource="Clientes"
          dtacli.RecordSetType= 0
        End Sub

    Caixas de Texto(TextBox)

    Agora para cada Textbox voce deve configurar as propriedades como segue:

    1- A propriedade DataSource deve receber o nome do objeto Data: DtaCli

    2- A propriedade DataField de cada TextBox deve ser vinculada ao respectivo campo
       da tabela Clientes.(Selecione na lista de campos).

    Feito isto o Controle de dados, DtaCli fornecerá o vinculo entre o seu formulário e o
    banco de dados através da propriedade DataField das Caixas de Texto(TextBox)
    e também as ferramentas para a navegação através do banco de dados.

    Para movimentar-se pelos registros da tabela Clientes basta clicar nos
    botões do objeto DtaCli.

    Código associado a cada botão de commando

    Dica: - A palavra Recordset pode representar um objeto e uma propriedade.
             Desta forma você pode atribuir um Recordset a uma variável
             objeto, da seguinte forma:

             Set meusdados = Data1.Recordset

             A seguir você pode se referir ao seu Recordset usando
             a variável objeto.(Não esqueça de definí-la previamente.)
             No exemplo a seguir não usaremos esta notação.

    Para inserir as linhas de código basta clicar duas vezes no botão correspondente
    do seu formulário.

    1-Código para botão incluir dados:

            Private Sub Incluir_Click()
                dtacli.Recordset.AddNew    'insere informações no buffer de cópia preparando
                                            para incluir um novo registro no recordset
                excluir.Enabled = False    'desabilita o botão excluir
                incluir.Enabled = False    'desabilita o botão incluir
                localizar.Enabled = False  'desabilita o botão localizar
                sair.Caption = "&Cancelar" 'Muda o nome do botão Sair para Cancelar
                gravar.Enabled = True      'Habilita o botão gravar
                nome.SetFocus              'põe o foco na caixa de texto nome
            End Sub

    Após clicar no botão Incluir, voce pode digitar os dados referentes a
    cada cliente e a seguir clicar no botão Gravar para gravar as informações
    na sua tabela Clientes ou cancelar o processo de inclusão.

    2-Código do botão gravar dados:

        Private Sub gravar_Click()
          If nome.Text = Empty Then
            MsgBox "Informe o nome do Cliente.", vbExclamation, "Gravar Clientes"
            nome.SetFocus
            Exit Sub
          End If
          If endereco.Text = Empty Then
            MsgBox "Informe o endereco do cliente.", vbExclamation,"Gravar Clientes"
            endereco.SetFocus
            Exit Sub
          End If
          If cidade.Text = Empty Then
            MsgBox "Informe a cidade do cliente.", vbExclamation,"Gravar Clientes"
            cidade.SetFocus
            Exit Sub
          End If
          If uf.Text = Empty Then
            MsgBox "Informe a UF do cliente.", vbExclamation, "Gravar Clientes"
            uf.SetFocus
            Exit Sub
          End If
          If cep.Text = Empty Then
            MsgBox "Informe o Cep do cliente.", vbExclamation, "Gravar Clientes"
            cep.SetFocus
            Exit Sub
          End If
          dtacli.UpdateRecord
          dtacli.Recordset.Bookmark = dtactl.Recordset.LastModified
          sair(4).Caption = "&Sair"
          localizar.Enabled = True
       End Sub

    Na rotina de gravação verificamos se os dados que são obrigatórios,no nosso caso só
    o telefone não é, foram informados;então nome,endereço,cidade,uf,cep não podem ser
    vazios(empty).

    Se qualquer deles não for informado é exibida a mensagem respectiva(msgbox), o foco
    retorna ao campo para preenchimento(setfocus) e a rotina de gravação é
    abandonada.(Exit Sub)

    Se todos os campos obrigatórios foram informados os sistema acrescenta fisicamente
    o registro na tabela, através do método UpdateRecord.A utilização deste método ,
    ao invés do método Update,tem a vantagem de não disparar os eventos Validate e
    Reposition do data control

    A utilização da propriedade BookMark do recordset apenas posiciona o
    ponteiro de registro no ultimo registro que sofreu modificações.

    A seguir restauramos o nome do botão Sair e habilitamos o botão localizar.

    3-Código do botão Cancelar a inclusão de dados:

       Private Sub Sair_Click()
         If sair.Caption = "&Cancelar" Then
            dtacli.Recordset.CancelUpdate
            dtacli.Recordset.MoveLast
            incluir.Enabled = True
            excluir.Enabled = True
            localizar.Enabled = True
            sair.Caption = "&Sair"
         Else
            If MsgBox("Quer sair do sistema ?", vbYesNo,"Sair do Sistema") = vbYes Then
              End
            Else
              Exit Sub
            End If
         End If
       End Sub

    Neste código verificamos se o nome do botão esta como Cancelar, em caso
    positivo, cancelamos qualquer atualização pendente através do metódo CancelUpdate.

    Em seguida movemos o ponteiro de registros para o último registro.

    Finalmente habilitamos os botões  Incluir, Excluir e Localizar e mudamos
    o nome do botão para Sair.

    Agora, se o nome do botão não for Cancelar solicitamos a confirmação para
    sair do Sistema(End) ou abandonar a rotina(Exit Sub) e retornar ao sistema.

    4-Código para o botão Excluir dados:

      Private Sub excluir_Click()
        If MsgBox("Confirma Exclusão do cliente  -> " & dtactl.Recordset![codigo], vbQuestion + vbYesNo, "Excluir Clientes") = vbYes Then
          dtacli.Recordset.Delete
          dtacli.Refresh
        End If
      End Sub

    Na rotina de exclusão, Solicitamos a confirmação da exclusão ,e, em
    caso afirmativo, usamos o método delete , que remove o registro do
    recordset e estabelece um valor nulo para o ponteiro de registro.

    A seguir atualizamos o objeto data control (Refresh).

    5-Código para o botão Localizar dados:

      Private Sub localizar_Click()
        Dim criterio As long
        Dim marcador As variant

        marcador = dtacli.Recordset.Bookmark
        dtacli.Recordset.Index = "codigo" 'recordset é do tipo Table !!!

        criterio = InputBox$("Codigo do cliente a localizar: ", "Localizar Clientes")

        If criterio <> Empty Then
          dtacli.Recordset.Seek "=", criterio
          If dtacli.Recordset.NoMatch Then
            MsgBox "Cliente não localizado ! ", vbExclamation, "Localizar Clientes"
            dtacli.Recordset.Bookmark = marcador
          End If
        Else
            dtacli.Recordset.Bookmark = marcador
        End If
      End Sub

    Para a rotina de localização definimos a posição atual do registro ativo usando
    a propriedade bookmark
    Definimos o índice ativo (codigo que foi criando anteriormente
    Solicitamos o código do cliente , armazenando o valor na variável critério.
    Se (If) criterio for diferente (<>) de vazio (empty), então um
    valor foi fornecido e podemos iniciar a localização usando o método seek. Se
    não for informado nenhum valor para a variável criterio retormamos o ponteiro de
    registro para a posição anterior ao inicio da localização.
    Se o valor não for encontrado (Nomatch=True) o sistema emite uma mensagem
    (msgbox), informando ao usuário e posiciona o ponteiro de registro na posição
    anterior a busca.

    6-Código do evento Reposition:

     Private Sub dtactl_Reposition() 'primeiro evento a ocorrer
      If dtacli.Recordset.RecordCount < > 0 Then
        incluir(0).Enabled = True
        excluir(1).Enabled = True
        dtacli.Caption = "Total de Clientes: " & dtactl.Recordset.RecordCount
      Else
        excluir(1).Enabled = False
        incluir(0).Enabled = True
        gravar(2).Enabled = False
        dtacli.Caption = "O arquivo esta vazio"
      End If
     End Sub

    O evento Reposition ocorre quando o Data control move-se de um registro
    para outro. No código acima cada vez que o o evento Reposition é disparado
    atualizamos a propriedade Caption do controle de dados atribuando a mesma
    o número total de registro do arquivo via propriedade RecordCount. Além disso
    habilitamos os botões incluir e excluir se houver registros no arquivo
    e desabilitamos os botões excluir e gravar se o arquivo estiver vazio.

    7-Código do evento Validate:

    Private Sub dtactl_Validate(Action As Integer, Save As Integer)
       If Save Then
          Select Case MsgBox("Deseja Salvar Alterações ?", vbQuestion + vbYesNo)
            Case vbYes '6
              If nome.Text = Empty Then
                 MsgBox "Nome do Cliente deve ser informado !", , "Gravar Clientes"
                 nome.SetFocus
                 Save = False 'nao salva os dados
                 Action = vbDataActionCancel 'Cancela acao
                 Exit Sub
              ElseIf endereco.Text = Empty Then
                 MsgBox "Endereco do Cliente deve ser informado !", , "Gravar Clientes"
                 endereco.SetFocus
                 Save = False
                 Action = vbDataActionCancel
                 Exit Sub
              ElseIf cidade.Text = Empty Then
                 MsgBox "Por favor, informe a cidade do Cliente !", , "Gravar Clientes"
                 cidade.SetFocus
                 Save = False
                 Action = vbDataActionCancel
                 Exit Sub
              ElseIf cep.Text = Empty Then
                 MsgBox "Cep do Cliente deve ser informado !", , "Gravar Clientes"
                 cep.SetFocus
                 Save = False
                 Action = vbDataActionCancel
                 Exit Sub
              ElseIf uf.Text = Empty Then
                 MsgBox "Por favor, informe a UF do Cliente !", , "Gravar Clientes"
                 uf.SetFocus
                 Save = False
                 Action = vbDataActionCancel
                 Exit Sub
              End If
            Case vbNo  '7
              Save = False
          End Select
      End If
    End Sub

    O evento Validate é acionado quando o Data Control está para mover-se de
    um registro para um novo. Nesse meio tempo você pode cancelar ou não
    as mudanças feitas no registro. A sub rotina do evento Validate possui dois
    argumentos:

    Action - Descreve o evento que causou o evento Validate
    Save   - Assume dois valores
    True  - se qualquer dado for modificado
    False - se não houver modificação

    Utilizamos o evento para validar os dados , cancelar a ação(vbDataActionCancel)
    e mudar o valor de Save quando necessário.

8-Código para tratamento de erros

    Private Sub dtactl_error(dataerr As Integer, response As Integer)
      'trata erros quando nenhum código esta sendo executado

        Select Case dataerr

             Case 3044 'caminho invalido
                MsgBox "O caminho informado não é valido, verifique !"
                End 'uma maneira muito rude de interromper sua aplicacao, mas...

             Case 3024 'nao achou banco de dados
                MsgBox "O arquivo definido não foi encontrado !"
                End

             Case Else
             'MsgBox "Erro  em  : " & Error$(dataerr) 'para mostrar o erro.
             response = vbDataErrcontinue  'ou vbdataErrdisplay

        End Select

    End Sub

A rotina acima é utilizada para interceptar erros que ocorrem quando nenhum código está sendo executado. Estes erros podem ocorrer quando a carga do formulário ainda não estiver completa. Agora basta rodar o projeto.

adios muchachos...

Retorna