ID do artigo: 151335 - Última revisão: quarta-feira, 17 de agosto de 2005 - Revisão: 2.1

Trabalhando com arquivos binários do Access

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Por si só, um arquivo consiste de nada mais do que uma série de bytes relacionados localizados em discos. Quando seu aplicativo acessa um arquivo, ele deve fazer suposições sobre o que os bytes devem para representar (números inteiros, seqüências de caracteres ou outros tipos de dados). Microsoft Excel Visual Basic for Applications fornece funções e instruções que permitem que você processar o arquivo com base nessas suposições. Por arquivos de processamento, seu aplicativo pode criar, manipular e armazenar grandes quantidades de dados, acessar vários conjuntos de dados ao mesmo tempo e compartilhar dados com outros aplicativos. Acesso binário permite que você usar arquivos para armazenar dados, no entanto, você deseja; há não suposições feitas sobre tipo de dados ou requisitos de tamanho de registro padrão. No entanto, você deve saber exatamente como os dados são gravados no arquivo para recuperá-la corretamente.

Mais Informações

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. Ao contrário de acesso de arquivo aleatório, acesso ao arquivo binário possui registros de comprimento variável. Houver espaço desperdiçado em um arquivo binário acessado. Se você recuperar os dados no local do arquivo 112 como um número inteiro, bytes 112 e 113 são recuperados para fazer backup de um valor inteiro, como um tipo de dados inteiro requer dois bytes.

Não importa que esses dois bytes pode ser parte de 4 bytes armazenados anteriormente como Long. Ele fica a seu aplicativo para controlar o conteúdo do arquivo e verifique se tais ações estão corretas. Este é um tipo de dados de exemplo para acesso ao arquivo binário:

   Type Person

      LName as String
      FName as String
      Age as Integer

   End Type
				


Observe que sobrenome e nome são seqüências de caracteres, que é um tipo de dados de comprimento variável. Idade for um inteiro, que é um tipo de dados de 2 bytes.

Para obter mais informações sobre os bytes necessários para tipos de dados, consulte o tópico da Ajuda on-line, "Tipo de dados Summary".

Vantagens de acessar arquivos binários

  • Você pode economizar espaço em disco criando registros de comprimento variável.
  • Você pode ler e gravar em um arquivo aberto para acesso binário como pode um arquivo aberto com acesso aleatório.

Desvantagem do binário arquivos do Access

  • Você deve saber exatamente como os dados são gravados no arquivo para manipulá-lo com êxito.

Gravar arquivos abertos para acesso binário

Como os registros com acesso binário podem ser de tamanho variável, é necessário armazenar, na verdade, informações sobre o tamanho de cada campo e registro para que ele possa ser lido com êxito. Uma boa maneira para fazer isso é armazenar um inteiro com cada seqüência de caracteres para indicar o tamanho da seqüência de caracteres. Este é um exemplo de criação de um arquivo:

   Type Person

      LName as String
      FName as String
      Age as Integer

   End Type
				


   Sub WriteOneRecord(PRecord as Person)
   Dim StrSize as Integer

      ' Write the LName field and indicate the length of LName
      ' because it is a variable-length string.
      StrSize = Len(PRecord.LName)
      Put #1,,StrSize
      Put #1,,PRecord.LName

      ' Write the FName field and indicate the length of FName
      ' because it is a variable-length string.
      StrSize = Len(PRecord.FName)
      Put #1,,StrSize
      Put #1,,PRecord.FName

      ' Write the Age field - this is type integer so it is not
      ' necessary to indicate a length.
      Put #1,,PRecord.Age

   End Sub

   Sub WriteBinary()
   Dim P as Person

      ' Create a new file and open it for Binary access.
      Open "BINARY.TXT" For Binary As #1

      ' Create and write the first record.
      P.LName = "Doe"
      P.FName = "Jane"
      P.Age = 9
      WriteOneRecord P

      ' Create and write the second record.
      P.LName = "Thompson"
      P.FName = "Richard"
      P.Age = 4
      WriteOneRecord P

      ' Close the file.
      Close #1

   End Sub
				


Quando a macro WriteBinary é executada, ele criará um arquivo chamado BINARY.TXT.

Os dois registros neste exemplo ocupam 34 bytes (como em oposição as 44 bytes necessários para os mesmos dados com acesso aleatório). Tenha em mente que ao abrir este arquivo em um editor de texto, como o bloco de notas, o arquivo não será legível. Ele é um arquivo binário, não um arquivo de texto.

Uma desvantagem usando o campo de comprimento variável e acesso binário em vez de campos de comprimento fixo e de acesso aleatório é que o registro inteiro pode ser gravado com uma chamada de função único usando acesso aleatório. Enquanto acesso binário fornece maior flexibilidade, ele também requer mais código para manipular operações de E/s.

Lendo arquivos abertos para acesso binário

A instrução Get lê um número de bytes iguais para os bytes necessários para a variável que é usada. Quando você usar obter com uma seqüência de comprimento variável, o número de bytes lidos do arquivo é igual ao comprimento atual da seqüência de caracteres. Para definir o tamanho de uma seqüência de caracteres de comprimento variável temporariamente, você pode usar a função $ para definir a variável igual para um número específico de espaços em branco ou espaços.

O exemplo a seguir lê um arquivo como o criado com a macro WriteBinary:

   Type Person

      LName as String
      FName as String
      Age as Integer

   End Type
				


   Sub ReadOneRecord(PRecord as Person)
   Dim StrSize As Integer

      ' Determine the size of the LName field and read it.
      Get #1, , StrSize
      PRecord.LName = String(StrSize," ")
      Get #1, , PRecord.LName

      ' Determine the size of the FName field and read it.
      Get #1, , StrSize
      PRecord.FName = String(StrSize," ")
      Get #1, , PRecord.FName

      ' Read the Age field.
      Get #1, , PRecord.Age

   End Sub


   Sub ReadBinary()
   Dim P as Person

      ' Open the file for Binary access.
      Open "BINARY.TXT" For Binary As #1

      ' Read each record in the file and display it in the Debug
      ' window.
      Do Until EOF(1)
         ReadOneRecord P
         Debug.Print P.LName, P.FName, P.Age
      Loop

      ' Close the file.
      Close #1

   End Sub
				

A informação contida neste artigo aplica-se a:
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel 98 for Macintosh
Palavras-chave: 
kbmt kbcode kbhowto kbprogramming KB151335 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 151335  (http://support.microsoft.com/kb/151335/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.