Ado - Código
Para utilizar o Ado via código, é necessário declararmos variáveis para o banco de dados, tabelas, como que os registros serão manipulados, etc.
Declarando Variáveis
Uma das vantagens também, é a definição das variáveis como públicas (serão declaradas dentro do módulo e poderão ser manipuladas em todos os formulários). Como o controle ado não funciona muito bem, a maioria dos programadores preferem e utilizam a codificação para acessar o ADO e embora tenhamos que escrever algumas linhas de códigos a mais, o código e o funcionamento do sistema fica mais confiável e preciso. Quando aparecer um determinado erro, fica mais fácil de corrigirmos e o sistema fica mais rápido. Crie um módulo e faça as seguintes referências:
Entre no Menu Projet / References

Marque as opções:

Se você não especificar estas dlls, você não terá como manipular a base de dados, como por exemplo: abrir, incluir, salvar, exclui, entre outros.
Declare então as variáveis para o banco de dados e para o recordset (tabela):
Public Cnn As New ADODB.Connection 'É utilizado Cn como nome de variável
para a conecção com o banco de dados
Public rsCliente As New ADODB.Recordset 'É utilizado rs mais o nome da
tabela para a conecção com a mesma
Vamos abrir o banco de dados dentro do módulo. Para isso crie uma sub nova. Logo abaixo da declaração das variáveis, digite:
Sub Main() (ao pressionar Enter, será criado automaticamente o End Sub)
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Clientes.mdb;Jet "
& _
"OLEDB:Database Password=;"
frmCliente.Show 1
End Sub
Explicando: Na variável Cnn estará especificado o provedor, o caminho onde atualmente o banco de dados está (App.Path) o nome do mesmo, e não foi definida nenhuma senha quando da criação do mesmo. A seguir é exibido o formulário de clientes.
Se você executar o programa, o mesmo não passará por este sub que você criou. Será necessário alterar indo até:
Menu Project / Properties
Na caixa StartUp Objects, selecione Sub Main e confirme no OK. Execute novamente o programa. Como só estará sendo aberto o banco de dados, não será executado nenhum outro processo, mesmo que haja registros na tabela.
Monte o formulário conforme figura abaixo:

Depois de montado, dê um duplo clique no formulário (onde não haja nenhum controle), e dentro do Form_Load digite:
rsCliente.CursorLocation = adUseClient
rsCliente.Open "Select * From Clientes", Cnn, adOpenDynamic, adLockOptimistic
Aqui estamos abrindo o recordset (tabela) de clientes, que está dentro do banco de dados (aberto no módulo na variável Cnn), com o bloqueio de registros otimista, e a navegação com o cursor dinâmico.
Selecione o evento UnLoad e digite:
set rsCliente = Nothing 'Quando o formulário é descarregado a tabela é também retirada da memória e fechada
Logo após qualquer End Sub, crie o seguinte private com a codificação abaixo:
Private Sub Exibir_Dados()
Call Limpar
On Error Resume Next
mskCodigo.Text = rsCliente!Codigo
If Not IsNull(rsCliente!Nome) Then txtNome.Text = rsCliente!Nome 'Senão
estiver nulo (em branco) então coloca o conteúdo que está
no campo (rsCliente!Nome) dentro da caixa de texto (txtNome.Text).
If Not IsNull(rsCliente!Endereco) Then txtEndereco.Text = rsCliente!Endereco
If Not IsNull(rsCliente!Cidade) Then txtCidade.Text = rsCliente!Cidade
If Not IsNull(rsCliente!Estado) Then txtEstado.Text = rsCliente!Estado
If Not IsNull(rsCliente!CEP) Then txtCEP.Text = rsCliente!CEP
If Not IsNull(rsCliente!Telefone) Then txtTelefone.Text = rsCliente!Telefone
If Not IsNull(rsCliente!CPF) Then txtCPF.Text = rsCliente!CPF
If Not IsNull(rsCliente!RG) Then txtRG.Text = rsCliente!RG
If Not IsNull(rsCliente!Observacao) Then txtObservacao.Text = rsCliente!Observacao
If Not IsNull(rsCliente!DataCadastro) Then txtData.Text = rsCliente!DataCadastro
cmdSalvar.Enabled = True
cmdExcluir.Enabled = True
End Sub
IsNull é importante, pois se algum campo foi salvo em branco (nulo), ao le-lo o visual basic exibirá mensagem de erro. É também habilitado os botões salvar, alterar e excluir.
Coloque de acordo com os códigos abaixo, a codificação dos botões: primeiro, anterior, próximo e último: (selecione cada botão e digite o que está entre o private e o end sub):
Selecione o botão Novo e digite a codificação abaixo:
Call Limpar
Dim sSQL As String
sSQL = "Select Max(Codigo) as MaxCliente From Clientes" 'Obtém
o número do maior código
Set rsCliente = Cn.Execute(sSQL) 'Executa para filtrar a linha acima
If Not rsCliente.EOF Then 'Se achou, soma mais um para obter o próximo
código
mskCodigo.Text = Val(rsCliente!MaxCliente) + 1
Else 'Caso contrário
mskCodigo.Text = 1 'É porque a tabela está vazia, e se iniciará
o código a partir do 1
End If
cmdNovo.Enabled = False 'Desabilita o botão Novo
cmdSalvar.Enabled = True 'Habilita o botão Novo
cmdExcluir.Enabled = False 'Desabilita o botão Excluir
txtNome.SetFocus 'Coloca o foco dentro do textbox
Selecione o botão Salvar e digite a
codificação abaixo:
If MsgBox("Deseja Salvar ?", vbQuestion + vbYesNo, "Salvar")
= vbYes Then
'On Error GoTo Erros_Salvar
If Val(txtCodigo.Text) = 0 Then
MsgBox "Informe o Código do Cliente!", vbInformation, "Código"
txtCodigo.SetFocus
Exit Sub
End If
If txtNome.Text = Empty Then 'Se a caixa de textos estiver em branco
MsgBox "Informe o Nome do Cliente!", vbInformation, "Nome"
txtNome.SetFocus
Exit Sub
End If
Dim sSQL As String
sSQL = "Select * From Cliente Where Codigo=" & Val(txtCodigo.Text)
Set rsCliente = Cnn.Execute(sSQL)
If Not rsCliente.EOF Then
sSQL = "Update Cliente Set Nome='" & txtNome.Text
sSQL = sSQL & "', Cidade='" & txtCidade.Text
sSQL = sSQL & "', Telefone='" & txtTelefone.Text
sSQL = sSQL & "', CPF='" & txtCPF.Text
sSQL = sSQL & "', RG='" & txtRG.Text & "'"
sSQL = sSQL & " Where Codigo=" & Val(txtCodigo.Text)
Else
sSQL = "Insert Into Clientes (Codigo, Nome, Cidade, Telefone, CPF, RG)"
sSQL = sSQL & "Values (" & txtCodigo.Text & ","
sSQL = sSQL & "'" & txtNome.Text & "'" &
","
sSQL = sSQL & "'" & txtCidade.Text & "'" &
","
sSQL = sSQL & "'" & mskTelefone.Text & "'" &
","
sSQL = sSQL & "'" & mskCPF.Text & "'" &
","
sSQL = sSQL & "'" & mskRG.Text & "'" & ")"
End If
Cnn.Execute (sSQL)
Controle = 0
Else
rsCliente.CancelUpdate
End If
cmdNovo.Enabled = True
Exit Sub
Erros_Salvar:
MsgBox Err.Number & Chr(13) & Err.Description
Selecione o botão Excluir e digite o código abaixo:
If rsCliente.RecordCount = 0 Then cmdExcluir.Enabled = False
If MsgBox("Deseja Excluir ?", vbQuestion + vbYesNo, "Excluir")
= vbYes Then
On Error GoTo Erros_Excluir
Dim sSQL As String
sSQL = "Delete From Clientes Where Codigo=" & txtCodigo.Text
Cn.Execute (sSQL)
Call Registros
Call Limpar
End If
mskCodigo.SetFocus
Exit Sub
Erros_Excluir:
MsgBox Err.Number & Chr(13) & Err.Description
Call Limpar
Logo após qualquer End Sub, crie o seguinte private com a codificação abaixo:
Private Sub Limpar()
txtCodigo.Text = ""
txtNome.Text = ""
txtEndereco.Text = ""
txtCidade.Text = ""
txtEstado.Text = ""
txtCEP.Text = ""
txtTelefone.Text = ""
txtCPF.Text = ""
txtRG.Text = ""
txtObservacao.Text = ""
txtData.Text = ""
End Sub
No evento GotFocus da caixa de textos Nome, coloque a codificação abaixo para ao digitar o código de um determinado cliente, ele colocar o conteúdo em cada caixa.
Private Sub txtNome_GotFocus()
txtNome.SelStart = 0
txtNome.SelLength = Len(txtNome.Text)
If cmdNovo.Enabled = False Then Exit Sub 'Se o botão
novo estiver desabilitado não executa as linhas abaixo
'move-se para o primeiro registro
rsCliente.MoveFirst
' inicia busca no recordset do início da tabela (adSearchForward)
rsCliente.Find "Codigo =" & txtCodigo.Text, 0, adSearchForward
If rsCliente.EOF Then
Call Limpar
cmdSalvar.Enabled = True
cmdExcluir.Enabled = False
Else
nSelecionado = 1
Call Exibir_Dados
End If
End Sub
Salve e execute e faça os testes.