REVISIÓN: IN y cláusulas UNION producen número incorrecto de columnas

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 283842
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Síntomas
Con el Microsoft proveedor OLE DB para Oracle (MSDAORA), la ejecución de una instrucción SQL que contiene un IN y una cláusula UNION puede producir un objeto de ActiveX Data Objects (ADO) Recordset que contiene un número incorrecto de columnas.

Este problema se produce cuando se utiliza un cursor de cliente de ADO (lo que significa que la propiedad CursorLocation está establecida en adUseClient ), pero funciona correctamente cuando se utiliza un cursor de servidor.
Solución
Para resolver este problema, obtenga el service pack más reciente de Microsoft MDAC 2.5. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
293312INFO: Cómo obtener la más reciente de MDAC 2.5 Service Pack
Para resolver este problema, obtenga el service pack más reciente para Microsoft Data Access Components 2.6. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
300635INFO: Cómo obtener la más reciente de MDAC 2.6 Service Pack

revisión

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Version       Size      File name     Platform   -------------------------------------------------------   2.53.6007.0   209,168   Msdaora.dll   x86				
Solución
El problema no se produce si utiliza un cursor de servidor; la propiedad CursorLocation se establece en adUseServer .
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se corrigió por primera vez en Microsoft Data Access Components 2.6 Service Pack 2, Service Pack 3 de MDAC 2.5 y MDAC 2.7.
Más información

Pasos para reproducir el comportamiento

  1. Agregue el código siguiente en un nuevo proyecto de Visual Basic y establezca una referencia de proyecto a la biblioteca Microsoft ActiveX Data Objects 2.5:
    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. Cuando ejecuta el proyecto anterior, se muestra un número incorrecto de columnas. También puede ver el error "El objeto estaba abierto" cuando observa el recuento de campos del conjunto de registros en la ventana Inspección Visual Basic. En este caso, la línea "rs.Fields.Count Debug.Print" no imprima cualquier resultado en la ventana Inmediato.

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 283842 - Última revisión: 01/05/2015 12:56:26 - Revisión: 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 KbMtes
Comentarios
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)