CORRECÇÃO: IN e cláusulas UNION produção contagem incorreta de coluna

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

Sintomas

Com o Microsoft OLE DB Provider para Oracle (MSDAORA), a execução de uma instrução SQL que contém um IN e uma cláusula UNION pode produzir um objeto ActiveX Data Objects (ADO) Recordset que contém um número incorreto de colunas.

Esse problema ocorre ao usar um cursor do ADO do lado do cliente (o que significa que a propriedade CursorLocation é definida como adUseClient ), mas funciona corretamente ao usar um cursor do lado do servidor.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft MDAC 2.5. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
293312INFO: Como obter o último MDAC 2.5 Service Pack
Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Data Access Components 2.6. 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:
   Version       Size      File name     Platform
   -------------------------------------------------------
   2.53.6007.0   209,168   Msdaora.dll   x86
				

Como Contornar

O problema não ocorre se você usar um cursor do lado do servidor; a propriedade CursorLocation é definida para adUseServer .

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 Microsoft Data Access Components 2.6 Service Pack 2, o MDAC 2.5 SP3 e o MDAC 2.7.

Mais Informações

Passos para reproduzir o problema

  1. Adicione o código a seguir em um novo projeto Visual Basic e defina uma referência de projeto para Microsoft ActiveX Data Objects 2.5 Library:
    Private Sub Command1_Click()
    
        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        cn.Open "Provider=MSDAORA;Data Source=your_oracle_server;User ID=your_user_name;Password=your_password"
        On Error Resume Next
        cn.Execute "Drop table oratest"
        cn.Execute "CREATE TABLE ORATEST(Col1 VARCHAR2(10) NULL," & _
                   "Col2 VARCHAR2(10) NULL)"
        cn.Execute "insert into oratest values(7,7)"
        cn.Execute " insert into oratest values(6,6)"
        cn.Execute "Drop table DUAL"
        cn.Execute "CREATE TABLE DUAL(C11 VARCHAR2(10) NULL," & _
                   "C12 VARCHAR2(10) NULL)"
        cn.Execute "insert into dual values(6,7)"
        rs.CursorLocation = adUseClient
        rs.Open "select col1, col2 from oratest where col1 in (Select C11 from dual union select C12 from dual)", _
                cn, adOpenStatic,adLockBatchOptimistic
        
        Debug.Print rs.Fields.Count      '<--- incorrect column count       
        Debug.Print rs.Fields(0).Name
        Debug.Print rs.Fields(1).Name
    End Sub
    					
  2. Quando você executar o projeto acima, um número incorreto de colunas é exibido. Você também pode ver o erro "Objeto estava aberto" quando você observar a contagem de campos do conjunto de registros na janela Watch Visual Basic. Nesse caso, a linha "Debug.Print rs.Fields.Count" não imprima qualquer resultado na janela Verificação imediata.

Propriedades

ID do artigo: 283842 - Última revisão: sexta-feira, 7 de abril de 2006 - Revisão: 6.1
A informação contida neste artigo aplica-se a:
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
Palavras-chave: 
kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kboracle kbprovider KB283842 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: 283842

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