Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/11/2011, 02h57   #1
Invité de passage
 
Nicolas
Inscription : décembre 2010
Messages : 26
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : décembre 2010
Messages : 26
Points : 3
Points : 3
Par défaut Accès tables d'une LIB via ODBC

Bonjour à tous,

Je travaille avec la base de données d'un AS400 via ODBC, depuis Windows. J'ai des requêtes SQL de sélection à faire sur différentes tables de l'AS400. Les tables se trouvent toutes dans une seule librairie.

Mon problème est que je n'arrive pas à accéder à une des tables de la lib. Je reçois un message d'erreur ODBC... Comme si la table n'existait pas dans cette librairie. Pourtant, si je refais la même requête SQL via l'émulateur avec la commande STRSQL, ça fonctionne parfaitement. Pour le reste, j'arrive parfaitement à accéder aux tables soit via ODBC soit via STRSQL.

J'utilise le driver MSDASQL avec la connexion string suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
'DRIVER=iSeries Access ODBC Driver;
               SYSTEM=ERP07;
               DBQ=QGPL;
               DFTPKGLIB=QGPL;
               LANGUAGEID=ENU;
               PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;
               XDYNAMIC=0;
               TRANSLATE=1;
               SIGNON=1;
               Uid=QSECOFR;
               Pwd=MONCODE;'
Je ne comprends pas pourquoi ça marche avec certaines tables et pas d'autres... Je me connecte à ODBC en tant que QSECOFR pour tester.
il y a peut-être un paramètre spécial à définir sur les tables pour qu'elles puissent être visible via ODBC ???

Merci de votre aide,

Cordialement,

Nico
nico.exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 08h27   #2
Membre éclairé
 
Homme
Inscription : septembre 2008
Messages : 255
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 255
Points : 314
Points : 314
Peut tu nous donner le message d'erreur ODBC ?
FORMULARY est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 09h52   #3
Invité de passage
 
Nicolas
Inscription : décembre 2010
Messages : 26
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : décembre 2010
Messages : 26
Points : 3
Points : 3
Bonjour,

oui, voici le message d'erreur :

Code :
1
2
3
OLE DB error trace [Non-interface error:  OLE/DB provider returned an invalid schema definition.].
Msg*7317, Niveau*16, État*1, Ligne*2
OLE DB provider 'MSDASQL' returned an invalid schema definition.
pas terrible comme message...
J'ai l'impression que ODBC ne trouve pas la table dans le schéma.
nico.exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 10h21   #4
Membre régulier
 
Inscription : octobre 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 113
Points : 94
Points : 94
Tu as peut être un pilote qui n'est pas à jour.
Quelle est la version d'OS sur le serveur et la version d'iSeries Access utilisée ?
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 10h29   #5
Membre éclairé
 
Homme
Inscription : septembre 2008
Messages : 255
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 255
Points : 314
Points : 314
Le message vient de MSDASQL, le driver ODBC de Microsoft qui reçoit une définition invalide de la bibliothèque.
Comme toutes tes tables sont dans la même bibliothèque, je ne pense pas qu'il s'agisse de la définition de la bibliothèque (le schéma) mais celle de la table.
La table est trouvée, mais la définition renvoyée n'est pas appréciée par ton driver ODBC. Vérifie le type de la table qui te pose problème (fichier PF ou LF plutôt que table SQL par exemple).

Je ne connais pas MSDASQL, donc je ne peux t'aider plus. Désolé.
FORMULARY est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 13h29   #6
Invité de passage
 
Nicolas
Inscription : décembre 2010
Messages : 26
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : décembre 2010
Messages : 26
Points : 3
Points : 3
Merci pour votre aide.

Côté AS400 : je suis en V6R1.

Côté Windows : je suis sur un Windows 2003 SP2 Français sur lequel est installé le System i navigator 6.1, l'émulateur console, les drivers odbc, ole-db,...

Dans odbcad32.exe, je dispose différents drivers :
  • "iSeries Access" version 12.00.06.00;
  • "Client Access ODBC 32 Driver" version 12.00.06.00.

Dans MS SQL Server (que j'utilise), j'ai le choix entre :
  • "IBM DB2 fo i5/OS IBMDASQL OLE DB Provider";
  • "IBM DB2 fo i5/OS IBMDA400 OLE DB Provider";
  • "IBM DB2 fo i5/OS IBMDARLA OLE DB Provider";


En interrogeant QSYS2.SYSTABLES, je consulte les paramètres d'une table qui me cause problème : ARTIC. Ensuite, je compare le résultat à une autre table qui fonctionne parfaitement. Et malheureusement, c'est exactement la même chose.

Exemple de ma table ARTIC qui me cause problème :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
TABLE_NAME	:	ARTIC
TABLE_OWNER	:	QSECOFR
TABLE_TYPE	:	P
COLUMN_COUNT	:	28
ROW_LENGTH	:	204
TABLE_TEXT	:	ARTICLES                                        A 
LONG_COMMENT	:	NULL
TABLE_SCHEMA	:	GIAM01
LAST_ALTERED_TIMESTAMP	:	2011-10-03 15:25:03.750
SYSTEM_TABLE_NAME	:	ARTIC     
SYSTEM_TABLE_SCHEMA	:	GIAM01    
FILE_TYPE	:	D
BASE_TABLE_SCHEMA	:	NULL
BASE_TABLE_NAME	:	NULL
BASE_TABLE_MEMBER	:	NULL
SYSTEM_TABLE	:	N
SELECT_OMIT	:	N
IS_INSERTABLE_INTO	:	YES
IASP_NUMBER	:	0
ENABLED	:	NULL
MAINTENANCE	:	NULL
REFRESH	:	NULL
REFRESH_TIME	:	NULL
MQT_DEFINITION	:	NULL
ISOLATION	:	NULL
PARTITION_TABLE	:	NO
TABLE_DEFINER	:	
MQT_RESTORE_DEFERRED	:	NULL
ROUNDING_MODE	:	NULL
Exemple de ma table ZONGEO qui fonctionne parfaitement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
TABLE_NAME	:	ZONGEO
TABLE_OWNER	:	QSECOFR
TABLE_TYPE	:	P
COLUMN_COUNT	:	4
ROW_LENGTH	:	34
TABLE_TEXT	:	Zones géographiques                              S
LONG_COMMENT	:	NULL
TABLE_SCHEMA	:	GIAM01
LAST_ALTERED_TIMESTAMP	:	2011-10-03 15:25:04.970
SYSTEM_TABLE_NAME	:	ZONGEO    
SYSTEM_TABLE_SCHEMA	:	GIAM01    
FILE_TYPE	:	D
BASE_TABLE_SCHEMA	:	NULL
BASE_TABLE_NAME	:	NULL
BASE_TABLE_MEMBER	:	NULL
SYSTEM_TABLE	:	N
SELECT_OMIT	:	N
IS_INSERTABLE_INTO	:	YES
IASP_NUMBER	:	0
ENABLED	:	NULL
MAINTENANCE	:	NULL
REFRESH	:	NULL
REFRESH_TIME	:	NULL
MQT_DEFINITION	:	NULL
ISOLATION	:	NULL
PARTITION_TABLE	:	NO
TABLE_DEFINER	:	
MQT_RESTORE_DEFERRED	:	NULL
ROUNDING_MODE	:	NULL
Je crois comprendre qu'il s'agit de fichiers "Physical File". Est-ce un problème ?

Je viens de faire un test avec le Driver IBMDASQL. J'ai su créer la connexion, mais je n'arrive pas a faire mes "select" sur la BD. Conseillez-vous d'utiliser un driver en particulier ?

Merci,

nico
nico.exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 17h41   #7
Membre régulier
 
Inscription : octobre 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 113
Points : 94
Points : 94
Tu n'arrives pas à requêter la table parce que la syntaxe est peut être légèrement différente avec ce driver. Du genre "Bibliothèque/NomFichier" au lieu de "Bibliothèque.NomFichier".
Personnellement j'utilise le driver IBMDA400.
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 15h25   #8
Invité de passage
 
Nicolas
Inscription : décembre 2010
Messages : 26
Détails du profil
Informations personnelles :
Nom : Nicolas

Informations forums :
Inscription : décembre 2010
Messages : 26
Points : 3
Points : 3
Bonjour à tous,

voilà j'y arrive. En effet, c'est mon driver qui était mauvais.

J'ai utilisé le driver IBMDASQL qui ne provoque plus l'erreur.

Il faut effectivement bien faire attention à la façon d’appeler schéma, librairie et table.

J'ai trouvé une documentation intéressante sur le sujet ici :

http://publib-b.boulder.ibm.com/Redb.../sg245183.html

Merci pour votre aide.
Cordialement,

nico
nico.exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h16.


 
 
 
 
Partenaires

Hébergement Web