Acesso a banco de dados externos(ISAM) padrão Xbase(Dbase/Clipper).
O Visual Basic utiliza o formato do banco de dados do Access, isto significa que os objetos:tabelas,consultas, índices, etc., são armazenados em um único arquivo MDB o qual é considerado como o banco de dados. No Dbase,FoxPro e Clipper o banco de dados pode ser constituído de muitos arquivos; arquivos de dados(DBF), arquivos de índices(NDX ou NTX) , etc. Esse formato de banco de dados é considerado um banco de dados externo do tipo ISAM.(Indexed Sequential Access Method) Ao usar o Controle de Dados para acessar uma base de dados padrão XBase você deverá fornecer as seguintes informações ao Visual Basic: 1-Propriedade Connect - Tipo de arquivo: dBaseIII, DbaseIV, FoxPro 2.X, etc. Ex: Connect: DbaseIII; 2-Propriedade Databasename - Caminho do diretório dos arquivos do banco de dados. Ex: Databasename: C:\CONTROLE 3-Propriedade RecordSource - Nome do arquivo DBF que contém os registros que você quer acessar via controle de dados, sem a a extensão DBF. EX: Recordsource: Agenda
Obs:Para arquivos XBase com extensão diferente de DBF informe a extensão separada do nome do arquivo pelo caractere #. Ex:Recordsource: Agenda#dat. |
Obs:Se durante a instalação do VB você optou
pela instalação dos arquivos ISAM, o Setup colocará
automaticamente as entradas no arquivo VB.INI, mas lembre-se que ao distribuir
a sua aplicação você deverá instalar um arquivo
INI com o mesmo nome do seu arquivo executável no diretório
Windows do usuário.(Ou informar o diretório usando a propriedade
IniPath).Ex:DBEngine.INIPath=path)
Além disso verifique se o arquivo XBS200.DLL está presente no diretório System do Windows caso contrário você obterá a mensagem de erro: "Can't find installable ISAM". |
Exemplo de arquivo INI:
[Installable ISAMs]
|
Além disso devemos incluir a seção
abaixo no arquivo INI:
[Dbase ISAM]
Isto evita que os registros deletados que ainda não foram removidos
do arquivo apareçam nos seus dados.
|
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:
![]() fig1. |
De início selecione o objeto controle de dados na Toolbox do Visual Basic e acrescente-o ao seu formulário.(Fig.1) |
![]() |
Defina a seguir as propriedades Name - Nome do Controle (O padrão é data1) e Caption - Especifica o nome que aparece no controle de dados.(O padrão é Data1) e dimensione o controle de dados.(Fig.2) |
![]() fig3. |
A seguir acrescente ao seu formulário um quadro
de texto(TextBox) para cada campo que desejar acessar a partir do
Recordsource, anexe cada quadro de texto ao objeto de controle de dados(DataSource)
e especifique o campo que cada quadro de texto deverá exibir(DataField).(fig3.)
|
![]() fig 4.0 |
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. |
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
![]() 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
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
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 |
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. |
1-Se você possuir o Microsoft Access a tarefa é simples.
![]() |
|