[resolu] connexion odbc sur un as400 (DB2)

Bonjour

j’essaye vainement d’installer des pilotes odbc ou jdbc si ça existe pour requêter la base de données d’un as400.
j’ai déjà essayé plusieurs tuto sans succès.
est ce que quelqu’un a une expérience sur le sujet.

merci

C’est une DBase2?
Il te faut trouver un pilote ODBC pour dbase2 et l’installer puis faire une entrée dans le odbc.ini correspondant. Mais tout cela dépend du pilote ODBC. DBase doit te fournir la configuration.

la seule solution que j’ai trouvé et essayé sans succès est d’installer le paquet .rpm fourni par ibm qui contient tout le pack ‘iseries access’. mais il y avait eu des messages d’erreurs à l’install et depuis php je n’arrivais pas à connecter la base.

sur le site de php.net ce n’est pas très clair, je ne comprends pas bien si ils conseillent d’installer des paquets pour l’os ou des modules de php.

Tu as deux choses: le connecteur ODBC et l’interface php/odbc.
La seconde est fourni par php4-odbc ou php5-odbc, le premier est plus compliqué du fait que dbase est propriétaire. Concentre toi sur le connecteur ODBC (en le testant avec openoffice par exemple) puis après ça devrait rouler.

en parlant de php je me demandais si il n’y avait pas un module comme php-mysql et qui permet de s’affranchir de la conf odbc, mais je ne suis peut être pas sur le bon forum pour ça …

Procédure réalisée sur debian 4.0r4a-i386

tux3:~# apt-get install unixodbc unixodbc-dev alien php5 php5-odbc libstdc++5 apache2
tux3:~# /etc/init.d/apache2 force-reload

telechargement de iSeriesAccess-5.4.0-1.6.i386.rpm depuis ibm.com (laborieux à obtenir, je le joint au post, a non il est trop gros, désolé …)

tux3:~# alien -i iSeriesAccess-5.4.0-1.6.i386.rpm --scripts
tux3:~# ln -s /usr/lib/libstdc++.so.5 /opt/ibm/iSeriesAccess/lib/libstdc++.so.5
tux3:~# ldconfig

fichier /etc/odbcinst.ini

[iSeries]
Description     = iSeries Access for Linux ODBC Driver
Driver          = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup           = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
NOTE1           = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2           = the following Driver64/Setup64 keywords will provide that support.
Driver64        = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64         = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading       = 2
DontDLClose     = 1
UsageCount      = 1

fichier /etc/odbc.ini

[i5plus] Description = serveur Iseries (Movex) Driver = iSeries System = 192.168.1.1

fichier /var/www/test.php

<?php
//
$dsn    = i5plus;
$user   = #######;
$passwd = #######;
$conn   = odbc_connect($dsn,$user,$passwd );
//
echo "votre id de connexion est : $conn";
//
if    ($conn <= 0) { echo "\nErreur\n";      }
else               { echo "\nSuccès\n";   }
//
odbc_close($conn);
//
?>

pour finir je lance depuis mon navigateur tux3/test.php, et Ô miracle de la technologie

votre id de connexion est : Resource id #2

Succès

merci moi.
@+

Bonjour,

Impossible de mettre la main sur ce fameux iSeriesAccess-5.4.0-1.6.i386.rpm. Est ce que quelqu’un la dans un coin pour le partager quelques secondes sur Internet ? Le site IBM part en time-out à chacun de mes essais :-/

Merci par avance,

j’ai le le fichier (3.4 Mo)
donne ton mail en MP

Merci ! je te contacte via MP

Bonjour,

Impossible de le faire fonctionner ici :

code Warning: odbc_connect() [function.odbc-connect]: SQL error: [unixODBC][Driver Manager]Driver’s SQLAllocHandle on SQL_HANDLE_HENV failed, SQL state IM004 in SQLConnect in /mnt/intranet/IE/test_db2/index.php5 on line 6
Call Stack

Time Memory Function Location

1 0.0050 240412 {main}( ) …/index.php5:0
2 0.0051 240412 odbc_connect ( ) …/index.php5:6
votre id de connexion est : Erreur
( ! ) Warning: odbc_close(): supplied argument is not a valid ODBC-Link resource in /mnt/intranet/IE/test_db2/index.php5 on line 13
Call Stack

Time Memory Function Location

1 0.0050 240412 {main}( ) …/index.php5:0
2 0.0780 240468 odbc_close ( ) …/index.php5:13[/code]

Ma configuration :

# dpkg -l | grep -i odbc ii php4-odbc 4.4.2-1.1 ODBC module for php4

Mon /etc/odbc.ini

[base01db2] Description = Connexion ODBC vers serveur 01 Driver = iSeries System = 10.4.3.1

Mon /etc/odbcinst.ini

[iSeries] Driver = /opt/ibm/iSeriesAccess/lib/libcwbcore.so Setup = /opt/ibm/iSeriesAccess/lib/libcwbcore.so Threading = 2 FileUsage = 1 DontDLClose = 1

Il ne me semble pas d’avoir un soucis coté des librairies :

# ldd /opt/ibm/iSeriesAccess/lib/libcwbcore.so linux-gate.so.1 => (0xffffe000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7e0e000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e0a000) libstdc++.so.5 => /opt/ibm/iSeriesAccess/lib/libstdc++.so.5 (0xb7d4f000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d29000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7d1e000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7bea000) /lib/ld-linux.so.2 (0x80000000)

Voici mon code php :

<?php // $dsn = "base01db2"; $user = "usern@me"; $passwd = "passw0rd"; $conn = odbc_connect($dsn,$user,$passwd); // echo "votre id de connexion est : $conn"; // if ($conn <= 0) { echo "\nErreur\n"; } else { echo "\nSuccès\n"; } // odbc_close($conn); // ?>

Quelqu’un aurait une idée ?

PS : merci pour le RPM thomas.leclerc

avec mon fichier /etc/odbcinst.ini (celui que j’ai mis dans la procédure ci dessus) ça devrait marcher

si je me rapelle entre le driver et le setup, il y a une difference.
le setup finit avec un ‘s’.

Finalement, cela à l’air de le faire :

[code]Warning: odbc_connect() [function.odbc-connect]: SQL error: [unixODBC][IBM][iSeries Access ODBC Driver]Communication link failure. comm rc=10061 - CWBCO1049 - The iSeries server application is not started, SQL state 08004 in SQLConnect in /mnt/intranet/IE/test_db2/index.php5 on line 5
Call Stack

Time Memory Function Location

1 0.0052 240640 {main}( ) …/index.php5:0
2 0.0052 240640 odbc_connect ( ) …/index.php5:5
votre id de connexion est : Erreur [/code]

Donc, cela part bien vers mon serveur DB2 et essaye de se connecter sur le port 8471 de mon serveur DB2. Malheureusement, rien ne tourne sur ce port, c’est une machine AIX avec une base DB2 tournant (il me semble) sur le port 5390 :-/ Une idée pour spécifier le port dans odbcinst.ini ?

essaye peut être

[base01db2] Description = Connexion ODBC vers serveur 01 Driver = iSeries System = 10.4.3.1 ServerPort = 10.4.3.1:8888

ou

[base01db2] Description = Connexion ODBC vers serveur 01 Driver = iSeries System = 10.4.3.1 ServerPort = 8888

sinon va voir sur http://www.unixodbc.org/

Rien à faire, cela n’en fait qu’a sa tête : ce sera le port 8471 et puis c’est tout. En fait, c’est une base DB2 sur AIX, je suppose que cela ne change rien à part que le port d’écoute sur 5390.

Pour changer le port, j’ai fait la modif dans le /etc/odbc.ini

ou

mais cela ne change strictement rien. Toutes mes tentatives de connexion partent vers le port 8471. J’avais déjà regardé le site unixodbc.org mais je ne trouve pas d’information intéressante.

@thomas.leclerc :

[quote]si je me rapelle entre le driver et le setup, il y a une difference.
le setup finit avec un ‘s’. [/quote]
Je ne comprends pas ce que tu voulu dire :-/

dans odbcinst.ini les lignes drivers et setup ne sont pas les mêmes
le fichier pointé par la ligne setup fini par un ‘s’.

[quote=“thomas.leclerc”]dans odbcinst.ini les lignes drivers et setup ne sont pas les mêmes
le fichier pointé par la ligne setup fini par un ‘s’.[/quote]
ha oui, je vois la différence, c’était surement pour cela que cela ne fonctionnait pas au début, j’avais dû oublié ce ‘s’

dans le pire des cas, utilise iptable pour faire un port-forwarding.