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

  [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

Reply #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

Reply #2 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

Reply #3 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

Reply #4 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

Reply #5 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

Reply #6 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

Reply #7 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

Reply #8 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

Reply #9 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 !

 
Page
  1. Exploitation de l'api jDao de jelix 1.3.1