Lo estaba enviando a las cuentas personales pero como sois muchos envio el
ejemplo al foro.

Hay un Redbook de IBM en PDF y en ingles en el siguiente link:
http://publib-b.boulder.ibm.com/cgi-bin/searchsite.cgi?query=sg245183

Ojo, son 3'5 Mb.

Saludos cordiales, 
Javier Garc�a Marqu�s 
LO�TRANS, Log�stica y Transporte, S.A. (Div. Inform�tica) 
Tel.:      93 298 30 78 
Fax.:     93 298 30 13 
E-mail: [EMAIL PROTECTED] 
Web:    www.lotrans.es 


-----Mensaje original-----
De: Javier Garc�a Marqu�s [mailto:[EMAIL PROTECTED] 
Enviado el: lunes, 09 de febrero de 2004 17:52
Para: 'RGB'; 'Mariano D�az Diaz'
Asunto: Acceso a iSeries por OLE-DB

Primero tienes que agregar estas referencias que estan en Client Access
(Instalando el componente)

AS/400 Express Toolkit Table Index Type Library 1.2
IBM AS/400 Client Access Express ActiveX Objects Library
Microsoft ActiveX Data Objects 2.0 Library

Luego defines la conexi�n, el recordset, el mandato y las variables para los
parametros.

Public Cn400 As New ADODB.Connection   'Conexion
Public Rs As New ADODB.Recordset           'Recordset
Public Mandato As New ADODB.Command  'Comando
Public Parany As String * 4                               'Parametro
Public Parmes As String * 2
Public Meses(1 To 12)
Public Anys(1 To 5)
Public mesnum

Sub Prueba()

    
' definir serie de meses

    Meses(1) = "Enero"
    Meses(2) = "Febrero"
    Meses(3) = "Marzo"
    Meses(4) = "Abril"
    Meses(5) = "Mayo"
    Meses(6) = "Junio"
    Meses(7) = "Julio"
    Meses(8) = "Agosto"
    Meses(9) = "Septiembre"
    Meses(10) = "Octubre"
    Meses(11) = "Noviembre"
    Meses(12) = "Diciembre"
        
' definir serie de a�os

    Anys(1) = Str(Year(Date))
    For e = 1 To 4
    Anys(e + 1) = Str(val(Anys(e) - 1))
    Next
    

' Llenamos y Mostramos formulario petici�n de par�metros que son mes y a�o
    
    For i = 1 To 12
    UserForm1.ComboBox1.AddItem Meses(i)
    Next
    
    For i = 1 To 5
    UserForm1.ComboBox2.AddItem Anys(i)
    Next
    
    UserForm1.Show
    
' Recuperamos par�metros para el AS400
    mesnum = UserForm1.ComboBox1.ListIndex + 1
    
    If mesnum < 10 Then
    Parmes = Str(mesnum)
    ElseIf mesnum = 10 Then Parmes = "10"
    ElseIf mesnum = 11 Then Parmes = "11"
    ElseIf mesnum = 12 Then Parmes = "12"
    End If
    
    Parany = Trim(UserForm1.ComboBox2.Text)

' abrimos conexion

    Cn400.Open "provider=IBMDA400;data source=192.168.3.1;", "", "" 
    
' Llamar a programa en el iSeries

    Set Mandato.ActiveConnection = Cn400
    Mandato.CommandText = "{{CALL /QSYS.LIB/PRUEBAS.LIB/PROGR12.PGM(?,?)}}"
    Mandato.Prepared = True
    Mandato.Parameters.Append Mandato.CreateParameter("Parmes", adChar,
adParamInput, 2)
    Mandato.Parameters.Append Mandato.CreateParameter("Parany", adChar,
adParamInput, 4)
    Parms = Array(Parmes, Parany)
    Mandato.Execute , Parms, adCmdText
   
' asignamos fichero a recordset

    Set Rs = Cn400.Execute("Select * From Pruebas.Archivf Order by Nombre")
    Rs.MoveFirst
    
' Llenamos Hoja de c�lculo leyendo registros en iSeries 
    
    Do
        
    Range("A" & y) = Rs.Fields("Nombre")
    Range("B" & y) = val(Replace(Rs.Fields("I1112"), ",", "."))
    Range("C" & y) = val(Replace(Rs.Fields("I1111"), ",", "."))
    Range("D" & y) = val(Replace(Rs.Fields("I1110"), ",", "."))
    Range("E" & y) = val(Replace(Rs.Fields("I1109"), ",", "."))
    Range("F" & y) = val(Replace(Rs.Fields("I1108"), ",", "."))
    Range("G" & y) = val(Replace(Rs.Fields("I1107"), ",", "."))
    Range("H" & y) = val(Replace(Rs.Fields("I1106"), ",", "."))
    Range("I" & y) = val(Replace(Rs.Fields("I1105"), ",", "."))
    Range("J" & y) = val(Replace(Rs.Fields("I1104"), ",", "."))
    Range("K" & y) = val(Replace(Rs.Fields("I1103"), ",", "."))
    Range("L" & y) = val(Replace(Rs.Fields("I1102"), ",", "."))
    Range("M" & y) = val(Replace(Rs.Fields("I1101"), ",", "."))
    Range("N" & y) = val(Replace(Rs.Fields("I1112"), ",", ".")) +
val(Replace(Rs.Fields("I1111"), ",", ".")) + val(Replace(Rs.Fields("I1110"),
",", ".")) _
                   + val(Replace(Rs.Fields("I1109"), ",", ".")) +
val(Replace(Rs.Fields("I1108"), ",", ".")) + val(Replace(Rs.Fields("I1107"),
",", ".")) _
                   + val(Replace(Rs.Fields("I1106"), ",", ".")) +
val(Replace(Rs.Fields("I1105"), ",", ".")) + val(Replace(Rs.Fields("I1104"),
",", ".")) _
                   + val(Replace(Rs.Fields("I1103"), ",", ".")) +
val(Replace(Rs.Fields("I1102"), ",", ".")) + val(Replace(Rs.Fields("I1101"),
",", "."))
    Range("O" & y) = val(Replace(Rs.Fields("I1100"), ",", "."))
    Range("P" & y) = Range("N" & y) + val(Replace(Rs.Fields("I1100"), ",",
"."))
    
    Rs.MoveNext
    
    Loop Until Rs.EOF
    
    End Sub

En este caso llenamos una hoja con datos de archive en iSeries, pero
funciona igual al reves.

Si podeis recibir 2 megas, os envio el redbook de IBM

Saludos cordiales, 
Javier Garc�a Marqu�s 
LO�TRANS, Log�stica y Transporte, S.A. (Div. Inform�tica) 
Tel.:      93 298 30 78 
Fax.:     93 298 30 13 
E-mail: [EMAIL PROTECTED] 
Web:    www.lotrans.es 


<<attachment: winmail.dat>>

Responder a