Artigo: 269495 - Última revisão: segunda-feira, 9 de Outubro de 2006 - Revisão: 3.0

PROBLEMA: "A operação de múltiplos passos OLE DB gerou erros" ao abrir ligaçã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 registo. Antes de modificar o registo, certifique-se de que efectua uma cópia de segurança e de que compreende como o pode restaurar se ocorrer um problema. Para obter informações sobre como efectuar uma cópia de segurança, restaurar e editar o registo, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
256986  (http://support.microsoft.com/kb/256986/ ) Descrição do registo do Microsoft Windows

Este artigo poderá conter hiperligações para conteúdo em inglês (ainda não traduzido). As opções mencionadas neste artigo poderão estar em inglês, consoante a versão do sistema operativo ou dos componentes instalados.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Quando tentar abrir uma ligação ADO (ActiveX Data Objects), poderá receber a seguinte mensagem de erro:
Run-time error '-2147217887 (80040e21):'

A operação de múltiplos passos OLE DB gerou erros. Verifique cada valor de estado OLE DB, se disponível. Não foi efectuado nenhum trabalho.

Causa

Seguem-se as duas causas possíveis deste erro:
  • No registo, na chave de um CLSID de um fornecedor de OLE DB, poderá existir uma entrada com o nome OLEDB_SERVICES. Se o fornecedor de OLE DB utilizado para efectuar a ligação ADO não tiver a entrada OLEDB_SERVICES e o ADO tentar configurar uma propriedade que não é suportada pelo fornecedor, o erro ocorre. Para obter mais informações sobre esta entrada de registo, consulte a secção "Resolução".
  • Se a entrada OLEDB_SERVICES existir, mas existir um problema na cadeia da ligação ADO, o erro ocorre.
Se a entrada de registo OLEDB_SERVICES não estiver presente, a chamada para configurar uma propriedade é efectuada directamente ao fornecedor. Se o fornecedor não suportar a propriedade, a chamada de OLE DB SetProperties efectuada pelo ADO vai falhar. Trata-se de uma falha fatal se a propriedade for necessária para estabelecer uma ligação. Se a propriedade for incluída de forma explícita na cadeia de ligação, é provavelmente necessária.

Se a definição da propriedade for opcional, a falha não é fatal. É este o caso quando estabelece ligação sem definir de forma explícita a propriedade na cadeia de ligação. Neste caso, o ADO define a propriedade como True, mas marca-a como opcional.

Resolução

Para contornar este problema, utilize um dos seguintes métodos:
  • Não utilize a palavra-chave "Persist Security Info" na cadeia da ligação ADO.
  • Adicione a entrada de registo OLEDB_SERVICES da seguinte maneira:

    Nota: crie apenas o valor OLEDB_SERVICES nas chaves de registo de fornecedores que suportem a agregação COM. O fornecedor de OLE DB do Exchange não suporta a agregação COM e quando o utilizador cria estes valores, recebe a seguinte mensagem de erro:
    0x80040E22
    Foi especificado um valor de controlo IUnknown não NULL e ou a interface pedida não era IUnknown ou o fornecedor não suporta a agregação COM.

    Aviso: a utilização incorrecta do Editor de registo poderá provocar problemas graves que poderão forçar a reinstalação do sistema operativo. A Microsoft não garante que os problemas resultantes da utilização incorrecta do Editor de registo possam ser resolvidos. Todo e qualquer risco decorrente da utilização do Editor de registo é da responsabilidade do utilizador.
    1. Inicie o Editor de registo.
    2. No registo, em HKEY_CLASSES_ROOT\CLSID, localize o CLSID do fornecedor de OLE DB. Por exemplo, a seguinte chave do registo corresponde ao Microsoft OLE DB Provider for SQL Server (SQLOLEDB):
      HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
      Clique no CLSID e, através do menu Editar, adicione o seguinte valor de registo:
      Nome do valor: OLEDB_SERVICES
      Tipo de dados: REG_DWORD
      Valor: 0xFFFFFFFF
      Nota: para localizar o CLSID do fornecedor que está a utilizar, procure o ProgID do fornecedor (SQLOLEDB, por exemplo) no registo, em HKEY_LOCAL_MACHINE\SOFTWARE\Classes\. No ProgID, vai encontrar uma chave com o nome CLSID.
  • Se estas condições forem cumpridas e, mesmo assim, continuar a receber o erro, examine a cadeia de ligação para detectar outros erros possíveis.

Mais Informação

Passos para reproduzir o comportamento

Cole o seguinte código num projecto executável padrão do Microsoft Visual Basic, defina uma referência de projecto como Microsoft ActiveX Data Objects e execute-o. O erro ocorre se utilizar o fornecedor DTSFlatFile ou qualquer fornecedor de OLE DB que não suporte uma das propriedades na cadeia de ligação, tal como "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 este erro, clique nos números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
228935  (http://support.microsoft.com/kb/228935/ ) FIX: Uninitialized string variables, empty string values, Jet provider, and errors occurred
253157  (http://support.microsoft.com/kb/253157/ ) BUG: Identity field remains read-only after executing SET IDENTITY_INSERT ON statement

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 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.