Não suportam a criação de índices.(Acesso via Data control).
(Neste caso você pode controlar a ordem na qual os registros serão exibidos
utilizando uma instrução SQL com propriedade Recordsource)
Conteúdo
Desenhando a Interface.
Vamos supor que você quer acessar o arquivo agenda.dbf 
(Arquivo padrão Dbase) que está no diretório teste no 
drive c.(C:\teste) usando o controle de dados.
O arquivo agenda possui a seguinte estrutura:
 -----------------------------------
 Nome do campo    Tipo       Tamanho
 -----------------------------------
 Nome             Caracter     30
 Endereco         Caracter     30
 Telefone         Caracter     11
 -----------------------------------
Vamos montar o formulário Agenda conforme descrito abaixo:
-Inicie  um novo projeto no Visual Basic.Grave o formulário Form1 
 como Agenda , e a seguir insira o controle de dados como
 indicado abaixo:
Ao final deveremos obter o formulário como mostrado na figura 4.0 abaixo:
|  fig 4.0
 | 
-Agora adicione ao Form1 os objetos e configure as propriedades conforme  
 a tabela 1.0 :
 Tabela 1.0 - Objetos e propriedades do formulário Clientes
 ------------------------------------------------------------------
  Objeto              Propriedade         Configuração
 ------------------------------------------------------------------    
  Form                  Name                Agenda
                        Caption             "Agenda"
 ------------------------------------------------------------------
  Data                  Name                data1
                        Caption             "C:\teste\Agenda.dbf"
                        Connect             "dBase III;"
                        Databasename        "C:\TESTE"(*)
                        RecordSource        "AGENDA"
 ------------------------------------------------------------------ 
  label                 Name                label1
                        Caption             "Nome"
                        Autosize             True
 ------------------------------------------------------------------
  label                 Name                label2
                        Caption             "Endereço"
                        Autosize             True
 ------------------------------------------------------------------
  label                 Name                label3
                        Caption             "Telefone"
                        Autosize             True
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               0 (**)
                        DataField           "Nome"           
                        DataSource          data1
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               1
                        DataField           "Endereco"           
                        DataSource          data1
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               2
                        DataField           "telefone"           
                        DataSource          data1
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               0 (***)
                        Caption             "&Incluir"
  ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               1
                        Caption             "&Excluir"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               2
                        Caption             "&Sair"
 ------------------------------------------------------------------                         
 (*)Ao informar o diretório no qual os arquivos estão localizados o
    Visual Basic passa a considerá-lo como o banco de dados onde
    estão localizados as tabelas, os índices, etc. .
(**)As caixas de texto são controladas por um vetor com um índice 
    identificador, possuindo em comum o nome e o tipo.
    
(***)Os botões de comandos também são um control array como as
    caixas de texto.
Conteúdo
Código do projeto.
Vamos usar o mínimo de código possível, apenas para ilustrar
o funcionamento da conexão do motor Jet com o arquivo agenda.dbf.
1-Código da seção de declarações do formulário
    Option Explicit
    Private rs As Recordset
2-Código do evento Activate do Formulário.
Private Sub Form_Activate()
  Set rs = Data1.Recordset 'designamos o conjunto de registro
                           'á variável recordset rs .
                           '(isso melhora o desempenho)
   
  If rs.RecordCount = 0 Then
     MsgBox "O arquivo vazio , inserir registro .", vbExclamation
     Command1_Click (0) 'botão p/incluir registro
  End If
   
End Sub
Como o controle de dados não pode lidar com um conjunto de 
registros vazio, se o arquivo estiver vazio ocorrerá uma 
mensagem de erro. Por isso o evento Activate verifica se
a propriedade Recordcount indica que o arquivo está vazio,
em caso positivo emitimos uma mensagem ao usuário(mgsbox) e "forçamos"
a inclusão de um registro no arquivo.(Command1_click(0)).
3-Código associado aos botões Incluir , Excluir e Sair.
Private Sub Command1_Click(Index As Integer)
  Select Case Index
     Case 0   ' botão incluir registro
        rs.AddNew
        Text1(0).SetFocus  'foca caixa de texto vinculada ao nome
     Case 1          'botão excluir registro
        If MsgBox("Confirma exclusão deste registro ? " & rs!nome, _
        vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then
           rs.Delete 'exclui registro do arquivo
           rs.MoveNext
           If rs.EOF Then
              If rs.BOF Then
                 MsgBox "O arquivo vazio , inserir registro .", vbExclamation
                 Command1_Click (0)   'incluir registro
              Else
                 rs.MoveLast
              End If
           End If
         End If
     Case 2  'botão sair do sistema
         End
  End Select
End Sub
Obs:Para movimentar-se pelo arquivo use o controle de dados:
|   | Note que não há necessidade de código para movimentar-se pelos
registros. | 
Conteúdo
Como acessar uma base de dados padrão XBase(Dbase,Fox,Clipper) via DAO.
Para se conectar a arquivos do Dbase/Clipper usando a DAO você usará o método Opendatabase para 
abrir a base de dados e o método Openrecordset para abrir o conjunto de registros que deseja acessar.
Esses são os procedimentos normalmente usados para trabalhar com os arquivos do Access. A diferença esta
na sintaxe utilizada, veja a seguir como fazer:
1-Ao invés de informar o nome do arquivo você deverá informar o caminho do 
diretório de localização de seus arquivos DBF.( C:\TESTE )
2-Você deverá informar também qual o tipo de arquivo ao qual você esta se 
conectando.(DbaseIII, DbaseIV, etc.) Veja abaixo como ficará o código 
para o nosso caso: 
Dim db as Database
Set db=DBEngine.Workspaces(0).Opendatabase("C:\TESTE",false,false,"DbaseIII")
3-Finalmente utilize o método OpenRecordset e informe o nome do arquivo
DBF , sem extensão , que você quer acessar. ( AGENDA )
Dim rs as Recordset
Set rs= db.OpenRecordset("agenda", dbOpenTable )
Conteúdo
Desenhando a Interface.
Utilizaremos o mesmo arquivo agenda.dbf que se encontra no diretório c:\teste.
-Inicie  um novo projeto no Visual Basic.Grave o formulário Form1 
 como Agenda2 , o qual deverá ter a seguinte aparência:
|  fig 5.0
 | 
-Adicione ao Form1 os objetos e configure as propriedades conforme  
 a tabela 2.0 :
 Tabela 2.0 - Objetos e propriedades do formulário Agenda2
 ------------------------------------------------------------------
  Objeto              Propriedade         Configuração
 ------------------------------------------------------------------    
  Form                  Name                Agenda
                        Caption             "Agenda"
 ------------------------------------------------------------------
  label                 Name                label1
                        Caption             "Nome"
                        Autosize             True
 ------------------------------------------------------------------
  label                 Name                label2
                        Caption             "Endereço"
                        Autosize             True
 ------------------------------------------------------------------
  label                 Name                label3
                        Caption             "Telefone"
                        Autosize             True
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               0 (**)
                        DataField           "Nome"           
                        DataSource          data1
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               1
                        DataField           "Endereco"           
                        DataSource          data1
 ------------------------------------------------------------------
  TextBox               Name                TEXT1
                        index               2
                        DataField           "telefone"           
                        DataSource          data1
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               0 (***)
                        Caption             "&Incluir"
  ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               1
                        Caption             "&Excluir"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               2
                        Caption             "&Sair"
 ------------------------------------------------------------------                         
  CommandButton         Name                COMMAND1
                        index               3
                        Caption             "&Alterar"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND1
                        index               4
                        Caption             "&Gravar"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND2
                        index               0 (****)
                        Caption             "<<"
  ------------------------------------------------------------------
  CommandButton         Name                COMMAND2
                        index               1
                        Caption             "<"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND2
                        index               2
                        Caption             ">"
 ------------------------------------------------------------------
  CommandButton         Name                COMMAND2
                        index               3
                        Caption             ">>"
 ------------------------------------------------------------------
 (*)Ao informar o diretório no qual os arquivos estão localizados o
    Visual Basic passa a considerá-lo como o banco de dados onde
    estão localizados as tabelas, os índices, etc. .
(**)As caixas de texto são controladas por um vetor com um índice 
    identificador, possuindo em comum o nome e o tipo.
    
(***)(****)Os botões de comandos também são um control array como 
    as caixas de texto. 
Conteúdo
Código do projeto.
Vejamos agora o código associado a cada evento ou botão de comando.
1-Código da seção declarações gerais do formulário
Option Explicit
Private db As Database
Private rs As Recordset
2-Código do evento Activate do formulário
Private Sub Form_Activate()
   If rs.BOF And rs.EOF Then
       MsgBox "O arquivo está vazio , vamos inserir um registro .", vbExclamation, "incluir registro"
       Command1_Click (0)
   End If
   mostra_reg
End Sub
3-Código do evento Load do formulário
Private Sub Form_Load()
  'abre base de dados e o arquivo dbf a acessar
  Set db = DBEngine.Workspaces(0).OpenDatabase("C:\TESTE", False, False, "Dbase III;")
  Set rs = db.OpenRecordset("agenda", dbOpenTable)
End Sub
4-Código dos botões de comandos de movimentação pelo arquivo
Private Sub Command2_Click(Index As Integer)
  Const MOVE_FIRST = 0
  Const MOVE_PREVIOUS = 1
  Const MOVE_NEXT = 2
  Const MOVE_LAST = 3
  Dim marca As Variant
  
  If (rs.EditMode = dbEditAdd) Or _
    (rs.EditMode = dbEditInProgress) Then
        rs.CancelUpdate
        Exit Sub
  End If
  Select Case Index
      Case MOVE_FIRST
        rs.MoveFirst
      Case MOVE_PREVIOUS
        If Not rs.BOF Then
           rs.MovePrevious
           If rs.BOF Then rs.MoveNext
        End If
      Case MOVE_NEXT
        If Not rs.EOF Then
           rs.MoveNext
           If rs.EOF Then rs.MovePrevious
        End If
      Case MOVE_LAST
        rs.MoveLast
End Select
      mostra_reg
End Sub
5-Código dos botões de comandos de Incluir, Alterar, Excluir, Gravar e Sair.
Private Sub Command1_Click(Index As Integer)
  Select Case Index
     Case 0  'incluir registro
        rs.AddNew
        limpa_regs
        Text1(0).SetFocus
     Case 1          'excluir registro
        If MsgBox("Confirma exclusão deste registro ? " & Chr(13) & rs!nome, _
        vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then
           rs.Delete 'exclui registro do arquivo
           rs.MoveNext
           If rs.EOF Then
              If rs.BOF Then
                 MsgBox "O arquivo está vazio , vamos inserir um registro .", vbExclamation, "agenda"
                 Command1_Click (0)   'incluir registro
              Else
                 rs.MoveLast
              End If
           End If
         End If
     Case 2   'sair do sistema
         End
     Case 3   'alterar
         rs.Edit
         Text1(0).SetFocus
     Case 4   'gravar registros
         grava_regs
  End Select
  mostra_reg
End Sub
6-Código da procedure para mostrar os registros nas caixas de texto.
Public Sub mostra_reg()
  Dim i As Integer
  For i = 0 To 2
    Text1(i) = IIf(Not IsNull(rs.Fields(i)), rs.Fields(i), "")
  Next i
  Text1(0).SetFocus
End Sub
6-Código da procedure para gravar os registros no arquivo
Public Sub grava_regs()
  Dim i As Integer
  If rs.EditMode = dbEditAdd Or _
  rs.EditMode = dbEditInProgress Then
    For i = 0 To 2
      rs.Fields(i) = Text1(i)
    Next i
    rs.Update 'atualiza registro
  End If
End Sub
7-Código da procedure para limpar o conteúdo das caixas de texto.
Public Sub limpa_regs()
  'limpa as caixas de texto
  Dim i As Integer
  For i = 0 To 2
    Text1(i) = ""
  Next
End Sub
Conteúdo
Utilizando índices.(Dbase/Fox).
A grande vantagem da conexão com base externas via DAO é que você pode
utilizar os índices para os formatos de arquivos DbaseIII e FoxPro.
Para isso você deverá fazer o seguinte:
1-Com o NotePad ou outro editor de texto crie um arquivo com estensão INF 
com o mesmo nome do arquivo DBF que quer acessar.
2-No arquivo INF crie uma seção chamada [Dbase III] e relacione os 
arquivos de índices que deseja utilizar da seguinte maneira:
| [Dbase III]
NDX1=NOME.NDX
NDX2=IDADE.NDX
...
...
 | Para o nosso exemplo, o nome do arquivo
seria AGENDA.INF  e teria o formato:
[Dbase III]
NDX1=NOME.NDX
 | 
3-Altere o código do evento Load do formulário para: 
Private Sub Form_Load()
  'abre base de dados o arquivo dbf a acessar e ativa o indíce NOME
  Set db = DBEngine.Workspaces(0).OpenDatabase("C:\TESTE", False, False, "Dbase III;")
  Set rs = db.OpenRecordset("agenda", dbOpenTable)
  rs.index="NOME"
End Sub
                    
Note que o nome do indice é informado sem a extensão NDX.
| Nota: O padrão de índices .NTX utilizados pelo Clipper não é
suportado pelo Jet. Uma forma de resolver isto é utilizar filtros e ordenações. | 
Conteúdo
Anexando arquivos DBF.
Dependendo da situação será mais produtivo anexar os arquivos DBF a um 
banco de dados padrão Access. Isto permite ao Visual Basic acessar os arquivos 
anexados como se fossem tabelas originais do Access.Vejamos como fazer isto:
1-Se você possuir o Microsoft Access a tarefa é simples. 
  Se tudo estiver certo o Access informa que o arquivo foi anexado com sucesso.
Na janela banco de dados o arquivo anexado é visualizado
como:  2-No Visual Basic, usando o Data Manager faça o seguinte:
2-No Visual Basic, usando o Data Manager faça o seguinte:
- 
  Abra o Data Manager e selecione a opção 
File->Open Database
 
- 
  Selecione o nome do banco de dados da caixa de diálogo 
Open Database e clique em Open
 
- 
  Clique no botão Attached Tables e escolha o botão New
 
- 
  Na caixa de diálogo Attached tables preencha os campos da
seguinte forma:
 
|   | 
Attachment Name - Nome que deseja para a tabela a anexar.(Agenda)
Database Name    - Diretório dos arquivos DBF a anexar.(C:\teste)
Connect String   - Selecione o tipo de arquivo a anexar.(Dbase III)
Table to Attach  - Nome do arquivo DBF a anexar.(Agenda.dbf)
 
Finalmente clique no botão Attach para anexar a tabela ao seu banco de
dados.
 |  
 As restrições para as tabelas anexadas são:
- Você não pode forçar a integridade referencial entre as tabelas
anexadas e as tabelas nativas
- Você só  pode abrir as tabelas anexadas como um Dynaset ou Snapshot
mas não como Table
- Você não pode alterar as propriedades: FieldSize, Validation Rule,
 DefaultValue e AllowZeroLength.
  
 
ConteúdoOs drivers ISAM e ODBC são instalados durante a instalação do Visual
  Basic(Você tem que selecioná-los). E , com o advento da ADO você pode usar um provedor OLE DB. 
  Obs: Leia também o artigo : Usando
  Dbase com o Jet