CORRECÇÃO: IN e cláusulas UNION produtos número de coluna incorrecta

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 283842
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Com o Microsoft OLE DB Provider para Oracle (MSDAORA), a execução de uma instrução de SQL que contém um IN e uma cláusula UNION pode produzir um objecto de conjunto de registos do ActiveX Data Objects (ADO) que contém um número incorrecto de colunas.

Este problema ocorre quando utilizar um cursor do lado do cliente de ADO (o que significa que a propriedade CursorLocation é definida como adUseClient ) mas funciona correctamente quando utilizar um cursor do lado do servidor.
Resolução
Para resolver este problema, obtenha o service pack mais recente do Microsoft MDAC 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.6. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
300635INFO: Como obter o MDAC 2.6 mais recente Service Pack

Correcção

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Version       Size      File name     Platform   -------------------------------------------------------   2.53.6007.0   209,168   Msdaora.dll   x86				
Como contornar
O problema não ocorre se utilizar um cursor do lado do servidor; a propriedade CursorLocation está definida como adUseServer .
Ponto Da Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no Microsoft Data Access Components 2.6 Service Pack 2, o MDAC 2.5 SP3 e o MDAC 2.7.
Mais Informação

Passos para reproduzir o comportamento

  1. Adicione o seguinte código num novo projecto do Visual Basic e defina uma referência de projecto para o 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).NameEnd Sub					
  2. Quando executar o projecto acima, é apresentado um número incorrecto de colunas. Também poderá ver o erro "O objecto foi aberto" Quando observar contagem de campos o conjunto de registos na janela Watch do Visual Basic. Neste caso, a linha "Debug.Print rs.Fields.Count" não seria impresso qualquer resultado na janela imediata.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 283842 - Última Revisão: 01/05/2015 12:56:33 - Revisão: 6.1

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

  • kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kboracle kbprovider KB283842 KbMtpt
Comentários