Bonjour,
depuis, de l'eau a coulé sous les ponts, et je manipule tous les jours des connexions à nos deux AS400 sans ODBC, ainsi d'ailleurs qu'à d'autres bases (SQL entre autres).
Voici comment faire :
1- il faut créer un objet CONNEXION:
Set Cnn = CreateObject("ADODB.connection")
Cnn.Open "provider=IBMDA400;data source=agrosys", "", ""
où agrosys est ici le nom de l'AS400
2- il faut ensuite créer un objet RECORDSET :
Set Rs = CreateObject("ADODB.recordset")
Set Rs.ActiveConnection = Cnn
il faut enfin ouvrir le RECORDSET
Rs.Open strsql
On peut tester l'état de la connexion et du recordset
if cnn.state = 1 then cnn.close
if rs.state = 1 then rs.close
il suffit, en préalable à l'ouverture du recordset, de définir la chaîne strsql, qui, comme vous l'aurez deviné, est une requête sur des fichiers AS400, du style :
strsql = " " & _
" select " & _
" agfic001.staclfpf.nclist, " & _
" substring(agcgf001.enccltlf.encaen, 1 , 1)," & _
" substring(agcgf001.enccltlf.encaen, 2 , 1)," & _
" substring(agcgf001.enccltlf.encaen, 3 , 1)," & _
" agfic001.clientpf.cpaycl, " & _
" agfic001.clientpf.collcl, " & _
" agfic001.clientpf.cen2cl, " & _
" agfic001.clientlf.raiscl, " & _
" agfic001.clientpf.rdoccl, " & _
" agfic001.clientpf.villcl, " & _
" agcgf001.enccltlf.mtaben " & _
" from " & _
" (((agfic001.staclfpf left join agcgf001.enccltpf on agfic001.staclfpf.nclist = agcgf001.enccltpf.nclfen)" & _
" left join agfic001.clientpf on agfic001.staclfpf.nclist = agfic001.clientpf.nclicl) " & _
" left join agfic001.clientlf on agfic001.clientpf.cen2cl = agfic001.clientlf.nclicl)" & _
" left join agcgf001.enccltlf on agcgf001.enccltpf.ncleen = agcgf001.enccltlf.nclfen " & _
" where (agfic001.staclfpf.dtcast >= " & debut & " And agfic001.staclfpf.dtcast <= " & fin & ")" & _
" order by agfic001.staclfpf.nclist"
ATTENTION !!!!
Vous constaterez que le plus difficile, ce n'est pas de se connecter à l'AS400, sans lien ODBC, (ça marche tout seul !), mais c'est la syntaxe des requêtes !!
Bon courage.