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:
-
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údo
Os 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