ID do artigo: 269495 - Última revisão: quarta-feira, 20 de dezembro de 2006 - Revisão: 4.0

PRB: "A operação de várias etapas do OLE DB gerou erros" durante abertura de conexão ADO

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.
Importante Este artigo contém informações sobre como modificar o registro. Antes de modificá-lo, faça um backup e certifique-se de que saiba como restaurá-lo caso ocorra algum problema. Para obter informações adicionais sobre como fazer backup, restaurar e modificar o Registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
256986  (http://support.microsoft.com/kb/256986/ ) Descrição do Registro do Microsoft Windows

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Ao tentar abrir uma conexão ActiveX Data Objects (ADO), a seguinte mensagem de erro pode ser exibida:
Erro em tempo de execução '-2147217887 (80040e21):'

A operação de várias etapas do OLE DB gerou os erros. Verifique cada valor de status do OLE DB, se disponível . Nenhum trabalho foi efetuado.

Causa

Estas são as duas causas possíveis do erro:
  • No Registro, na chave do CLSID de um provedor OLE DB, talvez haja uma entrada chamada OLEDB_SERVICES. Caso o provedor OLE DB usado na conexão ADO não tenha a entrada OLEDB_SERVICES, e o ADO tente definir uma propriedade para a qual o provedor não tenha suporte, o erro ocorre. Para obter mais informações sobre a entrada do Registro, consulte a seção "Resolução".
  • Caso a entrada OLEDB_SERVICES exista, mas haja um problema na cadeia de conexão ADO, o erro ocorre.
Caso a entrada do Registro OLEDB_SERVICES não esteja presente, a chamada para a definição de uma propriedade é feita diretamente para o provedor. Se o provedor não tiver suporte para a propriedade, a chamada OLE DB SetProperties feita pelo ADO irá falhar. Trata-se de uma falha fatal, caso a propriedade seja necessária para que se estabeleça uma conexão. Caso tenha sido incluída explicitamente na cadeia de conexão, é provável que a propriedade seja necessária.

Caso a configuração da propriedade seja opcional, a falha não é fatal. Trata-se do caso em que você se conecta sem configurar explicitamente a propriedade na cadeia de conexão. No caso, o ADO define para Verdadeira, mas marca a propriedade como sendo opcional.

Resolução

Para solucionar este problema, utilize um dos seguintes métodos:
  • Não use a palavra-chave "Persist Security Info" na cadeia de conexão ADO.
  • Adicione a entrada do Registro OLEDB_SERVICES da seguinte forma:

    Observação Só crie o valor OLEDB_SERVICES nas chaves do Registro de provedores que tenham suporte à agregação COM. O provedor OLE DB do Exchange não tem suporte à agregação COM e, ao criar os valores, a seguinte mensagem de erro é exibida:
    0x80040E22
    IUnknown de controle não NULO foi especificado, e a interface solicitada não era IUnknown ou o provedor não tem suporte para a agregação COM.

    Aviso O uso incorreto do Editor do Registro pode causar sérios problemas que talvez exijam a reinstalação do sistema operacional. A Microsoft não garante que os problemas resultantes do uso incorreto do Editor do Registro possam ser solucionados. O uso do Editor do Registro é de sua responsabilidade.
    1. Inicie o Editor do Registro.
    2. No Registro em HKEY_CLASSES_ROOT\CLSID, encontre o CLSID do provedor OLE DB. Por exemplo, a seguinte chave do Registro se destina ao Provedor OLE DB Microsoft para SQL Server (SQLOLEDB):
      HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
      Clique no CLSID e, no menu Editar, clique em Adicionar Valor e adicione o seguinte valor do Registro:
      Nome do Valor: OLEDB_SERVICES
      Tipo de dados: REG_DWORD
      Valor: 0xFFFFFFFF
      Observação Para encontrar o CLSID do provedor que você está usando, procure o ProgID do provedor (SQLOLEDB, por exemplo) no Registro em HKEY_LOCAL_MACHINE\SOFTWARE\Classes\. No ProgID, haverá uma chave chamada CLSID.
  • Caso as condições sejam atendidas e ainda assim o erro for exibido, examine a cadeia de conexão em busca de outros erros possíveis.

Mais Informações

Etapas para reproduzir o comportamento

Cole o seguinte código em um projeto Standard EXE do Microsoft Visual Basic, defina uma Referência de projeto para o Microsoft ActiveX Data Objects e, em seguida, execute-a. O erro ocorre ao usar o provedor DTSFlatFile ou qualquer outro OLE DB que não tenha suporte a uma das propriedades na cadeia de conexão como, por exemplo, o "Persist Security Info".
Private Sub Command1_Click()

Dim cn As New Connection

cn.Open "Provider=DTSFlatFile;Persist Security Info=True;" & _
            "Data Source=Mysql;Mode=Read;File Format=0;File Type=1;" & _
            "Skip Rows=0;First Row Column Name=False;Number of Column=0;" & _
            "Max characters per delimited column=255;" '<------ Error Occurs Here
            
End Sub
				

Referências

Para obter informações adicionais sobre o erro, clique nos números abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft (alguns artigos podem estar em inglês):
228935  (http://support.microsoft.com/kb/228935/ ) CORREÇÃO: Variáveis de cadeia não inicializadas, valores de cadeia vazios, provedor Jet e erros ocorridos
253157  (http://support.microsoft.com/kb/253157/ ) BUG: Campo de identidade permanece somente como leitura após a execução da instrução SET IDENTITY_INSERT ON

A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Palavras-chave: 
kbprb kbprovider KB269495
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.