Artigo: 151335 - Última revisão: quarta-feira, 17 de Agosto de 2005 - Revisão: 2.1

Trabalhar com ficheiros 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 | Reduzir tudo

Sumário

Por si só, um ficheiro consiste nada mais do que uma série de bytes relacionados localizados no discos. Quando a aplicação acede a um ficheiro, tem de estabelecer suposições sobre o que os bytes devem para representar (números inteiros, cadeias ou outros tipos de dados). Microsoft Excel Visual Basic for Applications fornece funções e instruções que lhe permitem processar o ficheiro com base nestes pressupostos. Por ficheiros de processamento, a aplicação pode criar, manipular e armazenar grandes quantidades de dados, aceder em simultâneo vários conjuntos de dados e partilhar dados com outras aplicações. Access binários permite-lhe utilizar ficheiros para armazenar dados, no entanto, pretende; existem não pressupostos efectuados sobre tipo de dados ou requisitos de comprimento de registo padrão. No entanto, tem de saber exactamente como os dados é escritos no ficheiro para recuperá-lo correctamente.

Mais Informação

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. Ao contrário de ficheiro aleatório de acesso, acesso a ficheiros binários possui registos de comprimento variável. Não existe nenhum espaço desperdiçado num ficheiro binário acedido. Se obtiver os dados na localização do ficheiro 112 como um número inteiro, bytes 112 e 113 são obtidos para constituir um valor inteiro, uma vez que um tipo de dados número inteiro requer dois bytes.

Não é importante que estes dois bytes poderá ser parte de 4 bytes anteriormente armazenados como longo. É até à sua aplicação para controlar o conteúdo do ficheiro e certifique-se que estas acções estão correctas. Segue-se um tipo de dados de exemplo para acesso a ficheiros binários:

   Type Person

      LName as String
      FName as String
      Age as Integer

   End Type
				


Note que lnome e Nm são cadeias, que é um tipo de dados de comprimento variável. Idade é 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 de ajuda online, "Resumo do tipo de dados".

Vantagens de aceder a ficheiros binários

  • Poderá poupar espaço em disco criando registos de comprimento variável.
  • Pode ler e escrever para um ficheiro aberto para acesso binário como pode um ficheiro aberto com acesso aleatório.

Desvantagem de aceder a ficheiros binários

  • Tem de saber exactamente como os dados é escritos no ficheiro para manipular com êxito.

Escrever ficheiros abertos para acesso binário

Dado que os registos com acesso binário podem ser de comprimento variável, é necessário, na realidade, armazenar informações sobre o tamanho de cada campo e registo para que possa ser lida com êxito. Uma boa forma de efectuar este procedimento é armazenar um número inteiro com cada cadeia para indicar o comprimento da cadeia. Segue-se um exemplo de criação de um ficheiro:

   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, criará um ficheiro denominado BINARY.TXT.

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

Um compromisso utilizando o campo de comprimento variável e acesso binário em vez de campos de comprimento fixo e de acesso aleatório é que todo o registo pode ser escrito com uma chamada de função única através de acesso aleatório. Enquanto o access binário fornece uma maior flexibilidade, também requer mais código para processar operações de E/s.

A ler ficheiros abertos para acesso binário

A instrução obter lê um número de bytes iguais a bytes necessários para a variável é utilizada. Quando utiliza obter com uma cadeia de comprimento variável, o número de bytes lidos a partir do ficheiro é igual comprimento actual da cadeia. Para definir temporariamente o comprimento de uma cadeia de comprimento variável, pode utilizar a função de $ STRING para definir a variável igual para um número específico de espaços em branco ou espaços.

O exemplo seguinte lê um ficheiro como uma criada 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 para 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.