Artigo: 906771 - Última revisão: sexta-feira, 11 de Maio de 2007 - Revisão: 1.4

Não é possível utilizar Visual Basic 2005 para ler os valores de tipo de dados de moeda de um ficheiro

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

Sintomas

Considere o seguinte cenário:
  • Utiliza valores de tipo de dados Moeda dentro de uma estrutura definida pelo utilizador.
  • Utilizar o Microsoft Visual Basic 6.0 para escrever os valores de tipo de dados Moeda para um ficheiro.
Neste cenário, não é possível de utilizar o Microsoft Visual Basic 2005 para ler os valores de tipo de dados de Moeda a partir do ficheiro.

Causa

Este problema ocorre porque o tipo de dados Moeda é actualizado para o tipo de dados decimal do Visual Basic 2005. Para autónomo decimal tipos de dados, do Visual Basic 2005 E/s leituras e escritas de dados decimal escreva valores como se fossem OA de CODIFICAÇÃO para os valores de tipo de dados. Para valores de tipo de dados de Moeda que estão dentro de uma estrutura definida pelo utilizador, a E/s de 2005 do Visual Basic lê e escreve os tipos de dados decimal sem tentar convertê-los para um tipo de dados Moeda OA de CODIFICAÇÃO . Isto faz com que Visual Basic 2005 incorrectamente ler o ficheiro que escreveu utilizando o Visual Basic 6.0.

Como contornar

Para contornar este problema, utilize um dos seguintes métodos.

Método 1

Utilize Visual Basic 2005 para ler a efectuar os valores de tipo de dados Moeda segurança a partir do ficheiro em separado, em vez de ler novamente a estrutura definida pelo utilizador. Por exemplo, utilize o seguinte código.
Dim currencyValue As Decimal 
FileGet(1, currencyValue) 
MsgBox(currencyValue)

Método 2

Utilize um valor de Int64 dentro da estrutura definida pelo utilizador. Em seguida, utilize o método Decimal.FromOACurrency para obter o valor de tipo de dados decimal do valor Int64 . Para o fazer, siga estes passos:
  1. Utilize o seguinte código para criar uma estrutura que utiliza um valor de Int64 .
    Private Structure TypeWithCurrency
    	Public c As Int64
    End Structure
  2. Utilize o seguinte código para ler o ficheiro e, em seguida, obter o valor de tipo de dados decimal a partir de valor Int64 .
    Dim t1 As TypeWithCurrency
    
    FileGet(1, t1)
    FileClose(1)
    
    Dim currencyValue As Decimal = Decimal.FromOACurrency(t1.c)
    MsgBox(currencyValue)
Nota Não pode utilizar Visual Basic 2005 para escrever os valores para o ficheiro e, em seguida, para ler os valores los a partir do ficheiro utilizando método 2. Se utilizar o Visual Basic 2005 para escrever os valores no ficheiro, os valores serão no tipo de dados decimal em vez de no tipo de dados Moeda . Método 2 só pode ser utilizado para modificar o ficheiro uma vez.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Mais Informação

Para mais informações, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
Função FileGet
http://msdn2.microsoft.com/en-us/library/3acfheek(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/3acfheek(vs.71).aspx)

Alterações de declaração de estrutura no Visual Basic
http://msdn2.microsoft.com/en-us/library/030kb3e9(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/030kb3e9(vs.71).aspx)

Migrar o código do VB6 para o VB .NET
http://msdn2.microsoft.com/en-us/library/aa239677(VS.60).aspx (http://msdn2.microsoft.com/en-us/library/aa239677(VS.60).aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
Palavras-chave: 
kbmt kbbug kbtshoot kbprb KB906771 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: 906771  (http://support.microsoft.com/kb/906771/en-us/ )