DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 194124 - Última revisão: quinta-feira, 24 de junho de 2004 - Revisão: 4.0

 

Nesta página

Sintomas

Ao se conectar a uma planilha do Excel usando o método OpenRecordset de DAO, alguns valores em uma coluna do Excel podem ser retornados como NULL quando o valor subjacente não é um nulo. Isso normalmente ocorre quando numérico e tipos de dados de texto estão misturados dentro da mesma coluna do Excel.

Causa

Esse problema é causado por uma limitação do driver ISAM do Excel em que uma vez que ele determina o tipo de dados de uma coluna do Excel, ela retornará um nulo para qualquer valor que não é do tipo de dados o driver ISAM tem padrão para essa coluna do Excel. O driver ISAM do Excel determina o tipo de dados de uma coluna do Excel examinando os valores reais no primeiro algumas linhas e, em seguida, escolhe um tipo de dados que representa a maioria dos valores do seu amostragem.

Resolução

Há duas soluções alternativas para esse comportamento:
  1. Garantir que os dados no Excel são inseridos como texto. Apenas reformatar a coluna do Excel para texto não será fazer isso. Você deve inserir novamente os valores existentes depois de reformatar a coluna do Excel. No Excel, você pode usar F5 inserir novamente os valores existentes na célula selecionada.
  2. Você pode adicionar a opção IMEX = 1; para o Excel conectar seqüência de caracteres no método OpenDatabase. Por exemplo:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    Observação: configuração IMEX = 1 informa o driver para usar o modo importação. Nesse estado, o registro configuração ImportMixedTypes = Text será ser notado. Isso força mistos dados a ser convertido em texto. Para isso funcione de forma confiável, você também pode ter que modificar a configuração do Registro, TypeGuessRows = 8. O ISAM analisa as oito primeiras linhas de driver por padrão e de amostragem que determina o tipo de dados. Se este oito linha amostragem é todos os numérica, em seguida, definir IMEX = 1 não converterá o tipo de dados padrão para texto; ele permanecerá numérico.

    Você deve ter cuidado que IMEX = 1 não ser usados indiscriminadamente. Isso é importar modo, portanto, os resultados podem ser imprevisíveis se você tentar fazer acrescenta ou atualizações de dados nesse modo.

    As configurações possíveis de IMEX são:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    a chave do registro onde as configurações descritas acima estão localizadas é:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Consulte a seção Referências deste artigo para obter informações sobre quando a planilha do Excel tem cabeçalhos de coluna de texto com dados numéricos.

Situação

Esse comportamento é por design.

Mais Informações

Etapas para reproduzir o problema

Para duplicar esse problema, primeiro crie uma pasta de trabalho do Excel com uma planilha de Sheet1 padrão. Na primeira coluna de Sheet1, insira os seguintes valores - 123, aaa, 456, bbb, 789. Salvar esta pasta de trabalho no seu diretório C:\Temp e denomine Book1.XLS.

No Visual Basic, crie um novo projeto Standard EXE e execute as seguintes etapas:
  1. Fazer uma referência a biblioteca de objetos do Microsoft DAO 3.5. No Visual Basic 6.0, isso será Microsoft DAO 3.51 Object Library.
  2. Adicione um CommandButton ao formulário novo.
  3. Coloque o código seguinte na seção de declaração geral do formulário:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    executar o projeto pressionando a tecla F5 e observe que, na janela Verificação imediata os valores de texto são impressos como nulo. Se a maioria dos valores da planilha do Excel eram texto, o resultado do código acima seria ser revertido. Ou seja, os valores numéricos seriam voltar como nulos.

Referências

Para obter informações adicionais, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:

190195  (http://support.microsoft.com/kb/190195/EN-US/ ) : como: extrair informações de planilha do Excel com o DAO

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbprb KB194124 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: 194124  (http://support.microsoft.com/kb/194124/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store