CORRECÇÃO: Erro de correlação usando Parameters.Refresh com SQLOLEDB

Traduções deste artigo Traduções deste artigo
ID do artigo: 297035 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sintomas

Ao executar uma consulta parametrizada UNION com o provedor de OLEDB SQLOLEDB, pode ser reportado ao seguinte erro:
Erro em tempo de execução '-2147467259 (80004005)':

O nome de correlação ' o ' está especificado várias vezes em uma cláusula FROM.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o SQL Server 2000, o service pack mais recente para o MDAC 2.6 ou o hotfix mencionado abaixo: Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
290211INF: Como obter o Service Pack mais recente do SQL Server 2000
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
300635INFO: Como obter o último MDAC 2.6 Service Pack

Hotfix

A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
 Date        Version         Size      File name     Platform
 -------------------------------------------------------------
 05/17/2001  2000.080.0294   491,584   Sqloledb.dll     x86
 05/17/2001  2000.080.0294    61,440   Sqloledb.rll     x86
				

Como Contornar

Para contornar esse problema, certifique-se de que a ordem dos nomes de tabela em cada uma das instruções SELECT é a mesma em cada consulta UNION.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no SQL Server 2000 Service Pack 2 e MDAC 2.6 Service Pack 2.

Mais Informações

Para reproduzir esse problema, execute o seguinte código Microsoft Visual Basic:
Sub CorrelationReproCode()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim sql As String
Dim fUseOutOfOrderUNION As Boolean

    Set conn = New ADODB.Connection
    conn.Open "Provider=sqloledb;Server=.;Database=northwind;" & _
              "Integrated Security=SSPI;"
    
    ' Change this to False to avoid the problem.
    fUseOutOfOrderUNION = True
    
    If (fUseOutOfOrderUNION) Then
        sql = "SELECT O.OrderDate FROM Customers R, Orders O " & _
              "WHERE R.CustomerId = O.CustomerId AND R.CustomerId = ? " & _
              "Union " & _
              "SELECT O.OrderDate FROM Orders O, Customers R " & _
              "WHERE R.CustomerID = O.CustomerID AND R.Region = ?"
    Else
        sql = "SELECT O.OrderDate FROM Customers R, Orders O " & _
              "WHERE R.CustomerId = O.CustomerId AND R.CustomerId = ? " & _
              "Union " & _
              "SELECT O.OrderDate FROM Customers R, Orders O " & _
              "WHERE R.CustomerID = O.CustomerID AND R.Region = ?"
    End If
    Set cmd = New ADODB.Command
    cmd.CommandText = sql
    Set cmd.ActiveConnection = conn

    ' Error will occur here if fUseOutOfOrderUNION is set to True.
    cmd.Parameters.Refresh
    Set cmd.ActiveConnection = Nothing
    Set cmd = Nothing
    conn.Close
    Set conn = Nothing
    
End Sub
				

Propriedades

ID do artigo: 297035 - Última revisão: segunda-feira, 26 de setembro de 2005 - Revisão: 2.3
A informação contida neste artigo aplica-se a:
  • Microsoft OLE DB Provider for SQL Server 7.0
  • Microsoft OLE DB Provider for SQL Server 7.01
  • Microsoft Data Access Components 2.6
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbbug kbfix kbmdac260sp2fix kbsqlserv2000presp2fix KB297035 KbMtpt
Traduçã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: 297035

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com