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

Seleccione idioma Seleccione idioma
Id. de artículo: 283842 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

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).Name
    End 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.

Propiedades

Id. de artículo: 283842 - Última revisión: viernes, 07 de abril de 2006 - Versión: 6.1
La información de este artículo se refiere 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
Palabras clave: 
kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kboracle kbprovider KB283842 KbMtes
Traducción automática
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

Enviar comentarios

 

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