Incluindo , Excluindo e Localizando dados em uma base de dados Access via ADO


O Problema

No capítulo anterior vimos como se conectar e navegar através de um base de dados Access. Você deve ter percebido que embora seja muito simples fazer isto na prática as sua aplicações vão precisar ter mais recursos. 

Vejamos a seguir como incluir , excluir e localizar registros de sua base de dados usando para isto a ADO Data Control.

Preparando os dados:

Para que tudo funcione bem nesta etapa vamos ter que alterar a estrutura da tabela Clientes. Vamos incluir um novo campo chamado Codigo que irá servir para atribuir um código único a cada cliente. Vamos usar esta propriedade para poder localizar cada cliente. Abaixo temos comparadas a estrutura anterior e a nova:

Perceba que o novo campo possui uma chave Primária  e é do tipo Autonumeração , ou seja , a medida que você inclui dados este campo sofre um incremento a cada registro inserido. 

Para especificar o campo chave Primária de uma tabela usamos a propriedade  Primary . Um campo de chave primária contém dados que identificam exclusivamente cada registro em uma tabela.

O que é uma chave primária ?

Um ou mais campos (colunas) cujo valor ou valores identificam de modo exclusivo cada registro de uma tabela. Uma chave primária não permite valores Nulos e deve sempre ter um índice exclusivo. Uma chave primária é usada para relacionar uma tabela a chaves estrangeiras em outras tabelas.

No Visual Basic, para acessar a propriedade Primary de um índice, usamos a propriedade PrimaryKey do ADO (ActiveX Data Objects, objetos de dados ActiveX).

O que é tipo de dados AutoNumeração ?

Um tipo de dados de campo que armazena automaticamente um número exclusivo para cada registro à medida que este é adicionado à tabela. Três tipos de número podem ser gerados: seqüencial (incremento de 1), aleatório e Código de Replicação (utilizado pelo Gerenciador de Replicação para garantir a integridad
e dos dados em bancos de dados replicados). Os números gerados por um campo AutoNumeração não podem ser excluídos ou modificados.

Vamos também criar um índice composto para nosso tabela clientes que será composto pelos campos: Nome e Sobrenome. Abaixo temos os índices existentes na nossa tabela:

O que é um índice ?

Um recurso que acelera a pesquisa e a classificação em uma tabela baseada em valores de chave e pode impor exclusividade nas linhas de uma tabela. A chave primária de uma tabela é automaticamente indexada. Alguns campos não podem ser indexados por causa de seus tipos de dados. Ex: campo do tipo Memorando.

Incluindo registros : A Técnica

A inclusão de um novo registro em sua base de dados via ADO requer duas etapas:

  1. Use o método AddNew do objeto Recordset do ADO data control para incluir uma nova linha em branco na memória e a seguir informe os registros desejados
  2. Use o método UpDate do objeto Recordset da ADO data control para salvar os registros na base de dados
  3. Use o método FindFirst/Seek do objeto recordset da ADO Data Control para localizar registros na base de dados.

Para excluir um registro usamos o método Delete do objeto Recordset da ADO. Após a exclusão do registro devemos mover o ADO data control para um registro válido: você pode usar MoveNext ou Moveprevious para isto.

A Prática

Nosso ponto de partida será a aplicação do capítulo anterior . Carregue o projeto adodc1.vbp e inclua um nova caixa de texto e um botão de comando com as seguintes propriedades(Fig 1.0):

TextBox Name Text8
  Text ""
  DataSource adodc11
  DataField Codigo
CommandButton Name CmdSair
  Caption &Sair
  Style 1-Graphical
  Picture escolha uma imagem
  TabStop False

Fig 1.0 Novos controles adicionados ao projeto adodc1.vbp e janela das propriedades do CommandButton

Vamos agora incluir um Menu de comandos ao projeto. Para isto , com o projeto carregado, pressione Ctrl+E , ou selecione as opção Menu Editor ... Ctrl+E do menu Tools. A janela da figura 2.0 irá surgir na tela. Crie um menu conforme a tabela 1.0 : ( Leia o artigo - Criando Menus com o Visual Basic)

Item do Menu Name mnuFile
  Caption &Arquivo
Item do Menu Name mnuNew
  Caption &Novo
  Indent 1
Item do Menu Name mnuSave
  Caption &Salvar
  Indent 1
  Enabled False
Item do Menu Name mnuEdit
  Caption &Edit
Item do Menu Name mnuDelete
  Caption &Excluir
  Indent 1
Fig 2.0 Tabela 1.0

O formulário FrmMain deverá fica com a seguinte aparência:

Voce deve alterar a propriedade TabIndex da caixa de texto (TextBox) text8 para zero, de text1 para 1 e assim sucessivamente até text7.

Isto é necessário para que o foco esteja na caixa text8 quando o projeto for carregado ( O padrão é o foco estar no controle com TabIndex=0 )

O Código

1-) Vamos agora inserir o código necessário para que nosso projeto funcione adequadamente. Clique duas vezes sobre o formulário do projeto e insira a declaração Option Explicit na seção General Declarations do formulário:

2-) O código a seguir, a procedure Save, irá verificar se algum registro novo foi incluído. Em caso positivo tenta salvar o novo registro e desabilita a opção Salvar do Menu de opções.

Private Sub Save()

   `Se estiver no modo de inclusão então salva
    If adodc1.Recordset.EditMode = adEditAdd Then

        On Error GoTo SaveFailure:
    
        adodc1.Recordset.Update 'salva o registro

        On Error GoTo 0 'desabilita o tratamento de erros

        `Como não precisa salvar , então desabilita a opção Salvar do Menu
        mnuSave.Enabled = False

    End If

 'Inicio Tratamento de erros (SaveDone e SaveFailure são chamadas Labels)
SaveDone:
    Exit Sub

SaveFailure:
    MsgBox Err.Number & vbCrLf & Err.Description 'Exibe a descrição do erro
    Resume SaveDone 'continua a execução a partir da linha SaveDone

End Sub

3-) A seguir o código para incluir um novo registro quando o usuário clicar na opção Incluir do Menu.

Private Sub mnuNew_Click()
    'Inclui uma nova linha em branco na memória
    adodc1.Recordset.AddNew

    `habilita a opção Salvar do Menu

    mnuSave.Enabled = True

End Sub

4-) O código da opção Salvar do menu, apenas chama a procedure Save.

Private Sub mnuSave_Click()

    Save

End Sub

5-) O código associado ao botão CmdSair, verifica se o usuário tenta sair após incluir um registro sem salvar, e, pergunta se ele quer salvar o registro informado.

Private Sub cmdSair_Click()
     Se estiver no modo de inclusão , então pergunta se quer salvar
    If adodc1.Recordset.EditMode = adEditAdd Then 

        If MsgBox("Deseja Salvar os dados ?", vbYesNo) = vbYes Then

            Save

        End If

    End If

    Unload Me

End Sub

6-) Para encerrar vejamos o código da opção Excluir do menu.

Private Sub mnuDelete_Click()
    'ativa o tratamento de erros
    On Error GoTo DeleteFailure:
    'exclui o registro
    adodc1.Recordset.Delete

    `O registro atual agora é invalido então movemos para o anterior
     adodc1.Recordset.MovePrevious

    `Se estivermos no inicio do arquivo movemos para o primeiro registro
    If adodc1.Recordset.BOF Then

        adodc1.Recordset.MoveFirst

    End If
'Inicio do tratamento de erros
DeleteDone:
    Exit Sub

DeleteFailure:
    MsgBox Err.Number & vbCrLf & Err.Description
    Resume DeleteDone

End Sub

7-) Não esqueça de salvar o seu projeto - adodc1.vbp ; após isto pressione F5 e veja o resultado

Localizando os Dados com ADO Data control

Aguarde conclusao...


José Carlos Macoratti