ID do artigo: 2517589 - Última revisão: sexta-feira, 25 de maio de 2012 - Revisão: 4.0

Um aplicativo ADO não é executado em sistemas operacionais de nível inferior após recompilá-lo em um computador que esteja executando o Windows 7 SP 1 ou Windows Server 2008 R2 SP 1 ou que tem o KB983246 instalado

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.
Cuidado ADO e ADO MD não foram totalmente testados em um Microsoft.Ambiente do NET Framework. Eles podem causar problemas intermitentes, especialmente em aplicativos baseados em serviço ou em aplicativos multissegmentados. As técnicas discutidas neste artigo só devem ser usadas como uma medida temporária durante a migração para o ADO.NET. Você só deve usar essas técnicas após você realizaram testes completos para certificar-se de que não há nenhum problema de compatibilidade. Os problemas causados por usando ADO ou ADO MD dessa maneira não são suportados. Para obter mais informações, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
840667   (http://support.microsoft.com/kb/840667/ ) Você receber erros inesperados ao usar ADO e ADO MD em um.Aplicativo do NET Framework
Expandir tudo | Recolher tudo

Sintomas

Considere o seguinte cenário. Em um computador que esteja executando o Windows 7 Service Pack 1 (SP1) ou Windows Server 2008 R2 SP 1 ou que tenha KB9823246 instalado, você pode recompilar um aplicativo do Microsoft ActiveX Data Objects (ADO) usando um dos seguintes aplicativos:
  • Microsoft Visual C++
  • Microsoft Visual Basic for Applications (VBA)
  • Microsoft Visual Basic 6
  • Microsoft.NET applications
Nesse cenário, você achar que o aplicativo não é executado em sistemas operacionais de nível inferior. Por exemplo, não é executado na versão de lançamento do Windows 7, Windows Vista e versões anteriores do Windows. Dependendo da implementação, você recebe uma mensagem de erro semelhante a uma das seguintes. (Você pode receber outras mensagens de erro).

Mensagem de erro 1
REGDB_E_CLASSNOTREG (0X80040154)
Mensagem de erro 2
E_POINTER (0X80004003)
Mensagem de erro 3
E_NOINTERFACE (0X80004002)
Mensagem de erro 4
Não é possível converter o objeto COM do tipo 'System.__ComObject' para o tipo de interface ' ADODB.Conexão '. Esta operação falhou porque a chamada QueryInterface no componente COM para a interface com IID '{00001550-0000-0010-8000-00AA006D2EA4}' falhou devido ao seguinte erro: nenhuma interface suportada (exceção de HRESULT: 0x80004002 (E_NOINTERFACE)). "
O seguinte segmento de código do Visual C++ replica esse problema.
#import " msado15.dll" no_namespace rename("EOF","EndOfFile")
 
int main()
{
  CoInitialize(NULL);
  _ConnectionPtr pConnection = NULL;
     HRESULT hr = pConnection.CreateInstance(__uuidof(Connection)); //hr gets E_NOINTERFACE here
}
O Visual Basic for Applications seguinte segmento de código replica esse problema.
Private Sub Form_Load()
 Dim Conn As New ADODB.Connection ?Runtime error here: Class does not support Automation or does not support expected interface
End Sub
Erro VBA:Erro de tempo de execução '430': classe não oferece suporte a automação ou não oferece suporte a interface esperada

Observação A Microsoft não suporta mais o assembly de interoperabilidade primária do ADO e não suporta Visual Basic 6. Para obter mais informações sobre suporte de Visual Basic 6, visite a seguinte página da Web do MSDN: Para obter mais informações sobre o assembly de interoperabilidade primária para a capacidade de suporte do ADO, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
318559  (http://support.microsoft.com/kb/318559/ ) Usando o assembly de interoperabilidade primário para o ADO ADODB () em Visual Studio.NET

Causa

Esse problema ocorre porque algumas interfaces ADO foram alteradas no SP1 do Windows 7 a ser associado a novos identificadores de instância (IIDs). As interfaces IID antigas foram atribuídas o sufixo a seguir:
_Deprecated
Por exemplo, a interface _Connection foi atualizado da seguinte maneira:
  • No Windows 7 e versões anteriores do Windows, a IID _Connection é 00000550-0000-0010-8000-00AA006D2EA4.
  • No SP1 do Windows 7, _Connection IID é 00001550-0000-0010-8000-00AA006D2EA4 e a IID para _Connection_Deprecated é 00000550-0000-0010-8000-00AA006D2EA4.
Se seu aplicativo usa a vinculação antecipada para _Connection, o novo IID é armazenado no aplicativo binário durante a compilação. Isso causa um erro quando o aplicativo é executado em um sistema operacional de baixo nível porque a IID não existe.

Algumas APIs do ADO são dependentes da plataforma no ADO 2.7 e em versões posteriores. Em versões de 64 bits do Windows, essas APIs ADO processar argumentos usando um tipo de dados de 64 bits (como o tipo de dados LONGLONG ). No entanto, aplicativos que usam essas APIs ainda usam o tipo de dados LONG . Portanto, você recebe uma mensagem de erro "Tipo incompatível" ao tentar executar a macro.

Resolução

Para resolver esse problema, instale uma das atualizações que são descritas no seguinte artigo na Base de dados de Conhecimento da Microsoft:
2640696  (http://support.microsoft.com/kb/2640696/ ) Um aplicativo baseado no ADO é compilado no SP1 do Windows 7 ou no Windows Server 2008 R2 SP1 não é executado em versões anteriores do Windows

Mais Informações

A melhor solução para as alterações do Windows 7 SP1 ADO GUID
http://blogs.msdn.com/b/psssql/Archive/2011/10/03/Yes-We-made-a-mistake-and-are-Finally-going-to-fix-IT.aspx (http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx)

A informação contida neste artigo aplica-se a:
  • Windows 7 Enterprise
  • Windows 7 Home Basic
  • Windows 7 Home Premium
  • Windows 7 Professional
  • Windows 7 Starter
  • Windows 7 Ultimate
  • Service Pack 3 para Windows XP
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista Business
  • Windows Vista Business 64-bit edition
  • Windows Vista Enterprise
  • Windows Vista Enterprise 64-bit edition
  • Windows Vista Home Basic
  • Windows Vista Home Basic 64-bit edition
  • Windows Vista Home Premium
  • Windows Vista Home Premium 64-bit edition
  • Service Pack 1 para Windows Vista
  • Windows Vista Service Pack 2
  • Windows Vista Starter
  • Windows Vista Ultimate
  • Windows Vista Ultimate 64-bit edition
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Datacenter without Hyper-V
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Enterprise without Hyper-V
  • Windows Server 2008 for Itanium-Based Systems
  • Windows Server 2008 for Windows Essential Server Solutions
  • Windows Server 2008 for Windows Essential Server Solutions without Hyper-V
  • Windows Server 2008 Foundation
  • Windows Server 2008 Standard
  • Windows Server 2008 Standard without Hyper-V
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Datacenter without Hyper-V
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Enterprise without Hyper-V
  • Windows Server 2008 R2 for Embedded Systems
  • Windows Server 2008 R2 for Itanium-Based Systems
  • Windows Server 2008 R2 Foundation
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Standard without Hyper-V
Palavras-chave: 
kbprb kbsurveynew kbprogramming kbtshoot kbmt KB2517589 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: 2517589  (http://support.microsoft.com/kb/2517589/en-us/ )