Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-03-2009 11:34:32

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Problème avec Trigger Oracle !

Bonjour,

j'ai un souci entre ma base oracle et mon application Zend.

j'ai Réalisé un trigger et une séquence pour réaliser la fonction Auto incrementation. mon problème est le suivant quand je rajoute une row.

Il m'affiche 'Cannot refresh row as parent is missing ' pourtant j'ai rajouté la fonction protected $_sequence = true;

Dans mon modèle :

<?php
class CreationCompte extends Zend_Db_Table_Abstract{
    // nom du schéma sur le SGBD mysql
    protected $_schema='XE';
    // nom de la table dans la base de données
    protected $_name='GIVRY.COMPTE';
    // nom de la clé primaire de la table
    protected $_primary='NUMCOMPTE';
   
    protected $_sequence = true;
}
?>

mon formulaire :

<HTML>
<BODY LANG="fr-FR" BACKGROUND="/projetBD/isc/images/Marceau.png" DIR="LTR">



<P ALIGN=CENTER><FONT COLOR="#000000"<FONT SIZE=4 STYLE="font-size: 15pt"><B>Formulaire pour créer un compte</B></FONT></P>
<BR>
<BR>
<P ALIGN=LEFT STYLE="font-weight: normal"><FONT COLOR="#000000"<FONT SIZE=3><B><u>Veuillez remplir ce formulaire compl&egrave;tement : </B></u></FONT></P>


<?php

class CreationCompteForm extends Zend_Form
{
public function __construct($options = null)
{

parent::__construct($options);
$this->setName('CreationCompte');




$TYPECOMPTE = new Zend_Form_Element_Text('TYPECOMPTE');
$TYPECOMPTE->setLabel('Quel est le type du compte :');
$TYPECOMPTE->setRequired(true);

$SOLDE = new Zend_Form_Element_Text('SOLDE');
$SOLDE->setLabel('Quel est le solde du compte :');
$SOLDE->setRequired(true);

$NUMAGENCE = new Zend_Form_Element_Text('NUMAGENCE');
$NUMAGENCE->setLabel('Le numero de l agence :');
$NUMAGENCE->setRequired(true);

$NUMCLIENT = new Zend_Form_Element_Text('NUMCLIENT');
$NUMCLIENT->setLabel('le numero d identification du Client :');
$NUMCLIENT->setRequired(true);

$submit = new Zend_Form_Element_Submit('Ajouter');

$this->addElements(array( $TYPECOMPTE, $SOLDE, $NUMAGENCE, $NUMCLIENT,  $submit));

echo '<li><a href="/projetBD/index/employe">Retour</a></li>' ;
}
}
?>
</BODY>
</HTML>

Mon Contrôler :

<?php
class CreationCompteController extends Zend_Controller_Action {
    public function init(){

        Zend_Loader::loadClass('CreationCompte');
        Zend_Loader::loadClass('CreationCompteForm');
        $registry= Zend_Registry::getInstance();

        $this->db=$registry->get('db');
    }

// Action poster
    function indexAction(){
    $this->view->title = "créer un compte";
    $form = new CreationCompteForm();
    if ($this->_request->isPost()) {
        $formData = $this->_request->getPost();
        // nous les affectons au formulaire
        $form->populate($formData);
        // qui applique les filtres
        $formData=$form->getValues();
    // activation des validateurs
    if ($form->isValid($formData)) {
    // ok, nous pouvons opérer
    $b = new CreationCompte($this->db);
    $Ajout=$b->createRow($formData);
    if ($Ajout ) {
    // sauvegarde dans la BD
    $id=$Ajout->save();
    return;
}
    }
    }
$this->view->form = $form;
}
}
?>

Néanmois l'ajout de la Row ce réalise quand même mais je souhaiterais enlever l'erreur quand même.

Hors ligne

 

#2 11-03-2009 10:05:25

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Problème avec Trigger Oracle !

Hello,

Il ne faut pas mettre $_sequence à true si c'est ton trigger qui fait le boulot. Avec le sequence à true, ZF réalise avant tout un select ma_sequ.nextval() from dual pour récupérer la valeur de l'incrément et ton trigger lui refait un +1.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 12-03-2009 08:00:00

Juroks
Nouveau membre
Date d'inscription: 16-02-2009
Messages: 6

Re: Problème avec Trigger Oracle !

D'accord mais Que je met ou non cette fonction, mon erreur est toujours la.

est-ce que la fonction last Id() pourrait fixer le problème ?

Hors ligne

 

#4 16-03-2009 08:51:36

bakeneko
Nouveau membre
Date d'inscription: 16-03-2009
Messages: 1

Re: Problème avec Trigger Oracle !

j'ai exactement le même problème avec oracle, avec des triggers et séquences pour faire de l'auto increment.J'ai aucun problème sous ma vieille base mysql, si quelqu'un a une solution pour que ça marche sous oracle je suis preneur


table

class AncienTable extends Zend_Db_Table_Abstract{
    protected $_name = 'ANCIEN';
    protected $_primary='n_ancien';
    protected $_rowClass='AncienRow';
}

config.ini

[bdd]
db.adapter = PDO_Oci
db.params.host = localhost
db.params.username = root
db.params.password = password
db.params.dbname = XE
db.params.options.caseFolding  = 2
db.params.options.autoQuoteIdentifiers = 0

Dernière modification par bakeneko (16-03-2009 09:00:55)

Hors ligne

 

#5 16-03-2009 15:44:44

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Problème avec Trigger Oracle !

Hello,

J'ai une variante d'un trigger qui n'utilise la séquence que si la valeur est nulle :

Code:

CREATE OR REPLACE TRIGGER "SCHEMA"."TABLE"
    BEFORE
INSERT ON "TABLE" FOR EACH ROW WHEN (new.ID_TABLE IS NULL) declare
    integrity_error  exception;
    errno            integer;
    errmsg           char(200);
    dummy            integer;
    found            boolean;

begin
    select SCHEMA.TABLE_SEQ.NEXTVAL INTO :new.ID_TABLE from dual;

--  Traitement d'erreurs
exception
    when integrity_error then
       raise_application_error(errno, errmsg);
end;

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages