Hola a todos.

Estoy intentado vincular consultas de AS/400 a  hojas Excel mediante OLE DB, pero no lo consigo:

El entorno de cliente es:
        Windows 2000 SP3
        Excel 2000
        IBM AS/400 Client Access Express v5 r1, nivel mod.: 0, nivel de servicio SI05361.


Utilizo  una macro en VB que se ejecuta desde dentro de Excel.

Dicha macro la he obtenido del MSDN de Microsoft y he sustuido la referencia al proveedor SQL Server por la referencia al proveedor AS400.

El c�digo utilizado es

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub createOLEDBQueryTable()

        Dim oQTB                 as QueryTable
        Dim wks                as WorkSheet

        set wks = ThisWorkbook.WorkSheets.Add

        set oQTB= wks.QueryTables.Add("OLEB;Provider=IBMDA400;Data Source=mi400;",wks.Range("A1"))

        with oQTB
                .CommandText ="SELECT * FROM MISDATOS"
                .CommandType=xlCmdSQL
                .Name="MISDATOS"
                .Refresh False
        end with

Exit sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Al llegar a la instrucci�n "Refresh" genera el siguiente mensaje de error : Error de la aplicaci�n '1004'  , sin m�s explicaciones.
Cambiando ligeramente las instrucciones, obtengo el mismo n�mero de error pero adem�s me indica que me ponga en contacto con el fabricante del proveedor OLE DB.


El siguiente c�digo s� funciona, pero el rango de datos producido no es
actualizable.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub createOLEDBQueryTable()
        Dim cn                        AS ADODB.connection
        Dim rs                        As ADODB.RecordSet
        Dim oQTB                 as QueryTable
        Dim wks                as WorkSheet


       
        set cn = new ADODB.Connection
        cn.Open "OLEB;Provider=IBMDA400;Data Source=mi400;"
       
        set rs = new ADODB.Recordset
        rs.Open "SELECT * FROM MISDATOS"

        set wks = ThisWorkbook.WorkSheets.Add
        set oQTB= wks.QueryTables.Add(rs,wks.Range("A1"))

        oQTB.Refresh false

Exit sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


Los ejemplos proporcionados por IBM pasan piadosamente por alto esta funcionalidad

�Algui�n ha hecho algo similar?

Gracias por adelantado.

Responder a