Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Problème SQL Identifiers sur driver ODBC iSeries et base DB2 UDB

Posted by gegette on 11/18/2010 10:18

Bonjour,

Je suis actuellement en train de découvrir Jelix et j'ai besoin de me connecter à une base DB2 sur AS400. Pour se faire j'utilise un Driver PDO ODBC et je me suis inspiré du Driver MSSQL pour Jelix. Mon dsn est de cette forme : dsn= "odbc:driver={iSeries Access ODBC Driver};SYSTEM=xxx.xxx.xxx.xxx;"

La connexion se passe très bien mais mon souci est que les requêtes générées contiennent des délimiteurs/identifiers (je ne suis pas sûr du terme) '[' et ']' qui encadrent le nom de la table ainsi que les champs. Et le problème est que la base DB2 UDB n'aime pas ces crochets...

Par exemple pour un SELECT j'obtiens : SELECT [ARTICLE].[NOM], [ARTICLE].[PRENOM] FROM [ARTICLE] AS [ARTICLE] et je voudrais : SELECT ARTICLE.NOM, ARTICLE.PRENOM FROM ARTICLE AS ARTICLE

Et l'erreur est :

[exception 42000] SQLSTATE[42000]: Syntax error or access violation: 0 [IBM][Pilote ODBC iSeries Access][DB2 UDB]SQL0104 - Elément syntaxique [ n'est pas correct. Eléments possibles : ( + * - ? : DAY RRN CASE CAST CHAR DATE DAYS HASH HOUR LEFT RANK. (SQLPrepare0 at ext\pdo_odbc\odbc_driver.c:206) D:\dev\jelix-1.2RC2-dev\lib\jelix\db\jDbPDOConnection.class.php 136

Est ce que quelqu'un saurait comment on peut paramétrer ces délimiteurs/identifiers ? Y aurait t'il une constante PDO à affecter ou bien une commande SQL pour modifier le comportement vis à vis de ces crochets ?

Pour info, j'ai bien vérifié que mon problème venait de la en faisant des str_replace des crochets par des blancs sur mon argument dans la méthode query() de la classe jDbPDOConnection et cela fonctionne. Le problème est que toutes les requêtes ne passent pas par cette méthode query()...

  [Opened] Problème SQL Identifiers sur driver ODBC iSeries et base DB2 UDB

Salut,

je ne sais pas de quelle manière tu t'es "inspiré" du driver mssql. Mais il semble que tu as fait un copier coller sans corriger tout ce qu'il y avait à changer dans la classe de type daobuilder de ton driver. tu devrais y jeter un coup d'oeil ;-)

  [Opened] Problème SQL Identifiers sur driver ODBC iSeries et base DB2 UDB

Reply #2 Posted by gegette on 11/22/2010 16:48

Effectivement, la solution se trouvait au niveau de la méthode _encloseName().

Merci !

 
Page
  1. Problème SQL Identifiers sur driver ODBC iSeries et base DB2 UDB