[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/21/2012 16:21
j'ai essayer de corriger comme vous aviez demandé sans succès
en fait ; lorque
- Si ça ne fonctionne pas, je ne vois pas ce qu'on peut faire de plus. Pour moi, tout est en ordre dans la classe PHP générée, et je soupçonnerai alors plutôt un problème du coté de la connexion et de la base... :: en fait, lorque j'exécute la commande
php cmd.php createdao jdao user USER
tout ce passe bien, il y'a creation du dao avec ce message dans le fichier error.log que je viens de constaté
2012-03-21 16:13:23 127.0.0.1 sql SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT, (SELECT CONSTRAINT_TYPE FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UCC.TABLE_NAME = UTC.TABLE_NAME AND UC.TABLE_NAME = UTC.TABLE_NAME AND UCC.COLUMN_NAME = UTC.COLUMN_NAME AND UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME AND UC.CONSTRAINT_TYPE = 'P') AS CONSTRAINT_TYPE FROM USER_TAB_COLUMNS UTC WHERE UTC.TABLE_NAME = 'USER' 0.00175809860229msOriginal query: 0 jDbPDOConnection->query() C:\xampp\htdocs\jelix\lib\jelix\plugins\db\oci\oci.dbtools.php : 140 1 ociDbTools->getFieldList() C:\xampp\htdocs\jelix\lib\jelix-scripts\commands\createdao.cmd.php : 81 2 createdaoCommand->run() C:\xampp\htdocs\jelix\lib\jelix-scripts\includes\cmd.inc.php : 86 3 require() C:\xampp\htdocs\jelix\jdao\cmd.php : 11
- j'ai l'impression qu'il ya bien un accès à la BD oracle, et donc je ne pense pas que l'accès à la bd oracle est à incrimier
voici la config de mes logger
[logger] _all = default=file error= file warning=file notice=file sql=file deprecated= strict= debug= [fileLogger] error=errors.log sql=sqls.log
il n y a rien dans le fichier sqls.log
- voici le contenu du fichier dao créer :
<?xml version="1.0" encoding="UTF-8"?> <dao xmlns="http://jelix.org/ns/dao/1.0"> <datasources> <primarytable name="USER" realname="USER" primarykey="nom" /> </datasources> <record> <property name="nom" fieldname="nom" datatype="varchar2" required="true" maxlength="20"/> <property name="prenom" fieldname="prenom" datatype="varchar2" default="" maxlength="20"/> <property name="age" fieldname="age" datatype="number" default=""/> <!--<property name="" fieldname="" datatype="string/int/float/date" required="yes" maxlength="" minlength="" regexp="" sequence="" updatepattern="" insertpattern="" selectpattern=""/>--> </record> <factory> <!--<method name="findByStage" type="select/selectfirst/delete/update/php"> <parameter name="" /> <values> <value property="" value="" /> </values> <conditions logic="and/or"> <eq property="" value="" /> </conditions> <order> <orderitem property="" way="asc/desc" /> </order> <limit offset="" count=""/> <body><![CDATA[ ]]></body> </method>--> </factory> </dao>
- Merci de continuer à m'aider
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/21/2012 16:51
j'ai essayé d'executer la requête généré après l'exécution de la commande createdao directement dans Oracle via Toad et elle renvoie bien les résultats escomptés
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT, (SELECT CONSTRAINT_TYPE FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UCC.TABLE_NAME = UTC.TABLE_NAME AND UC.TABLE_NAME = UTC.TABLE_NAME AND UCC.COLUMN_NAME = UTC.COLUMN_NAME AND UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME AND UC.CONSTRAINT_TYPE = 'P') AS CONSTRAINT_TYPE FROM USER_TAB_COLUMNS UTC WHERE UTC.TABLE_NAME = 'USER'
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by laurentj on 03/21/2012 17:02
elle renvoie bien les résultats escomptés
ok, mais cette requête n'agit pas sur la table user. Donc si il y a un problème de droit sur la table, ce n'est pas cette requête qui va planter.
Essayez via Toad (avec les mêmes identifiant de connexion bien sûr) de faire un insert, ou même un simple select sur cette table user.
Coté jelix, je ne vois vraiment pas ce qui cloche. Essayez de faire un insert dans un simple script PHP (sans jelix donc), via PDO, avec le même DSN &cie. (et en utilisant le nom "user" ou "USER" pour être sûr)
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/21/2012 17:58
Merci de continuer à me donner un coup de pouce
en fait, je suis aller dans le fichier 'jdao~user~oci.php' et j'ai fait un die("$query") afin de récupérer la requete INSERT qui est exécuté : la requête est :
INSERT INTO USER ( nom,prenom,age ) VALUES ( 'TCHAMI5', 'Landry', 29 )
ensuite je copie cette requete et je me connecte à toad avec les même parametre de connexion que dans le profil jelix, lorque j'essaye d'exécuter la requete généré, j'obtiens le même message d'erreur que celui recontré dans jelix (invalide table name). Dans la suite lorque j'essaye de modifier la requête généré comme suit:
INSERT INTO "JDAO"."USER" ( nom,prenom,age ) VALUES ( 'TCHAMI5', 'Landry', 29 )
l'insertion se passe très bien, là je constate que Oracle n'a pas pu interpréter la requete à cause d'un probème de syntaxe, comment donc resoudre ce probrome, faut 'il effectué une configuration sur oracle
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by laurentj on 03/22/2012 13:59
C'est quoi ce "JDAO" dans le insert ? un schéma ?
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/22/2012 14:03
Bonjour
Oui c'est un nouvau schéma que j'ai créé juste pour ne plus utiliser le schéma system, je lui est assigné les probilèges dba et j'ai créé une table "USER" dans ce schéma.
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/22/2012 14:04
cela pouvait être
INSERT INTO "SYSTEM"."USER" ( nom,prenom,age ) VALUES ( 'TCHAMI5', 'Landry', 29 )
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by William on 03/22/2012 14:06
voici mon profil de connexion
[jdb:testjdao2] ; profil de connexion à une base de données Oracle driver=pdo dsn="oci:dbname=//localhost:1521/yob" user=jdao password=jdao persistent=on force_encoding=on usepdo=on
Merci Bien pour votre sollicitide
Bien cordialement . . .
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by laurentj on 03/22/2012 14:34
Je n'y connais pas grand chose à la configuration d'Oracle. Essayez de voir si vous ne pouvez pas indiquer le schéma par défaut à utiliser pour cette connexion, soit via le DSN, soit via un fichier tnsname.ora, soit ailleurs dans oracle... Ça doit forcément être possible vu que ce problème n'a jamais été identifié dans Jelix et que le support Oracle a été réalisé par un contributeur qui avait besoin d'Oracle.
En tout cas dans jDao, il n'y a pour le moment pas de solution. Si il y a moyen, après la connexion, d’exécuter une requête SQL qui sélectionne le schéma par défaut pour les requêtes suivante, on pourra éventuellement développer cette petite évolution (comme ce qui avait été fait pour le driver pgsql).
PS: c'est pas plutôt JDAO qu'il faut indiquer dans le dsn ? dsn="oci:dbname=//localhost:1521/JDAO"
[Opened] Exploitation de l'api jDao de jelix 1.3.1
Posted by foxmask on 03/22/2012 15:19
Bonjour
si je me réfère à la doc php le dsn doit contenir , non pas le nom du schéma mais le service.
ce service est référencé dans le tnsname.ora comme indiqué ici
Exemple de Tnsnames.ora, Je défini un service FOXMASK :
FOXMASK = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = FOXMASKSID) ) )
Imaginons que je veuille me connecter à un schéma nommé JELIX sur l'instance Oracle (aussi nommé ORACLE_SID) FOXMASKSID, voici ici ce que je taperai :
sqlplus JELIX/MOTDEPASS@FOXMASK
du coup dans le fichier de config je mettrai :
[jdb:testjdao2] ; profil de connexion à une base de données Oracle driver=pdo dsn="oci:dbname=FOXMASK" user=JDAO password=JDAO persistent=on force_encoding=on usepdo=on
Ainsi par ce biais je vais aller voir si pour l'utilisateur JDAO existe pour l'instance FOXMASKSID (qui est accédé via le 'SERVICE' FOXMASK présent dansle tnsnames.ora)
Nota : en principe, les paramètres avec oracle sont sensible à la casse. un user jdao est different de JDAO.
J'espère que ca éclaircira les choses.
cordialement
edit si on utilisait oracle sans PDO ca donnerait :
database="localhost/FOXMASK"
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !