IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[JSF / Hibernate / Oracle BDD] Problème d'insertion dans deux tables à la fois


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut [JSF / Hibernate / Oracle BDD] Problème d'insertion dans deux tables à la fois
    Bonjour tout le monde
    J'ai un petit souci au niveau de l'ajout d'un enregistrement dans la BD, et je demande votre aide s'il vous plait.
    En fait j'ai deux tables: Facture et Fournisseur, avec une cardinalité ManyToOne du coté de la table Facture, et OneToMany du coté de la table Fournisseur.
    Je veux ajouter une facture à la BD en remplissant tous ses champs dans un formulaire JSF, et parmi les informations à fournir à la facture il y’a celle concernant le fournisseur.

    Je vous communique quelque bouts du code:

    ManagedBean FactureBean: (action du bouton de la page JSF)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    public String EnregistrerFactureBo()
        {
            // Informations concernant le fournisseur:
            fournisseur.setSociete(fournisseur.getSociete());
            fournisseur.setAdresse(fournisseur.getAdresse());
            fournisseur.setEmail(fournisseur.getEmail()); 
     
            Engagement e = factureDao.Find_Engagement(IdEngagement);
            Statut s = factureDao.Find_Statut(IdStatut);
            Utilisateur u = factureDao.Find_Utilisateur(CodeUtilisateur);
            Fournisseur f = fournisseurDao.AjoutFournisseur(fournisseur);
     
            if(f!=null)
            {
     
            Date date = new Date( System.currentTimeMillis() );
            // SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy hh:mm:ss" );
            // System.out.println( sdf.format( date ) );
     
            facture.setNumeroFacture(facture.getNumeroFacture());
            facture.setReference(facture.getReference());
            facture.setEngagement(e);
            facture.setFournisseur(fournisseur);
            facture.setMontant(facture.getMontant());
            facture.setStatut(s);
            facture.setUtilisateur(u);  // Je dois récupérer l'User connécté!!!!
     
            facture.setDateReceptionPhysique(date);
            facture.setDateReceptionSysteme(date);
            }
     
            Boolean resultat = factureDao.EnregistrerBo(facture);
     
            if(resultat==true)
            {
                return "index";
            }
            else
            {
                return "echec";
            }
     
        }

    FactureDAO: (fonction d'ajout de la facture)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public Boolean EnregistrerBo(Facture f)
        {
            session.beginTransaction();
            session.save(f);
            session.getTransaction().commit();
            session.close();
            return true;
        }
    FournisseurDAO: (fonction d'ajout du fournisseur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public Fournisseur AjoutFournisseur(Fournisseur f)
        {        
     
            Session session =sessionFactory.openSession();
            session.beginTransaction();
            session.save(f);
            session.getTransaction().commit();
            session.close();
     
            return fournisseur;
        }
    ManagedBean FournisseurBean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
     
     
    package Beans;
     
    import Entités.Fournisseur;
    import javax.faces.bean.ManagedBean;
     
    @ManagedBean
    public class FournisseurBean {
     
        private Fournisseur fournisseur = new Fournisseur();
     
        // Constructeur:
     
        public FournisseurBean() {
            this.fournisseur = new Fournisseur();
        }
     
     
        // Setters et Getters:
     
        public Fournisseur getFournisseur() {
            return fournisseur;
        }
     
        public void setFournisseur(Fournisseur fournisseur) {
            this.fournisseur = fournisseur;
        }
     
     
    }
    Ma page JSF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <h:form>
                <p:growl id="msg" showDetail="true" life="3000" />
                <p:panel id="panel" header="Enregistrement d'une facture" style="width: 600px;">
                    <p:messages id="msgs" />
                        <h:panelGrid  columns="3" cellpadding="5">
     
                        <p:outputLabel for="NuméroFacture" value="Numéro Facture:"  />
                        <p:inputText  id="NuméroFacture" label="NuméroFacture" value="#{factureBean.facture.numeroFacture}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel for="Référence" value="Référence:"  />
                        <p:inputText  id="Référence" label="Référence" value="#{factureBean.facture.reference}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel value="Engagement:" />
                        <p:selectOneMenu value="#{factureBean.idEngagement}" >
    				<f:selectItem itemLabel="select one..." itemValue="" />
                                    <f:selectItems var="cat"   value="#{factureBean.listeTypeEngagement}" itemLabel="#{cat.typeEngagement}" itemValue="#{cat.idEngagement}" />
                        </p:selectOneMenu>
                        <p:spacer></p:spacer>
     
                        <p:outputLabel for="Société" value="Fournisseur: (Société):"  />
                        <p:inputText  id="Société" label="Société" value="#{fournisseurBean.fournisseur.societe}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel for="AdresseFournisseur" value="Adresse Fournisseur"  />
                        <p:inputText  id="AdresseFournisseur" label="AdresseFournisseur" value="#{fournisseurBean.fournisseur.adresse}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel for="EmailFournisseur" value="Email Fournisseur:"  />
                        <p:inputText  id="EmailFournisseur" label="EmailFournisseur" value="#{fournisseurBean.fournisseur.email}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel for="Montant" value="Montant Facture:"  />
                        <p:inputText  id="Montant" label="Montant" value="#{factureBean.facture.montant}" required="true">
                        <f:validateLength minimum="2" />
                        </p:inputText> <br/>
     
                        <p:outputLabel value="Statut:" />
                        <p:selectOneMenu value="#{factureBean.idStatut}" >
    				<f:selectItem itemLabel="select one..." itemValue="" />
                                    <f:selectItems var="cat"   value="#{factureBean.listeIntituleStatut}" itemLabel="#{cat.intituleStatut}" itemValue="#{cat.idStatut}" />
                        </p:selectOneMenu>
                        <p:spacer></p:spacer>
     
                        <p:outputLabel value="Utilisateur:" />
                        <p:selectOneMenu value="#{factureBean.codeUtilisateur}" >
    				<f:selectItem itemLabel="select one..." itemValue="" />
                                    <f:selectItems var="cat"   value="#{factureBean.listeLogin}" itemLabel="#{cat.login}" itemValue="#{cat.codeUtilisateur}" />
                        </p:selectOneMenu>
                        <p:spacer></p:spacer>
     
                        <p:commandButton value="Enregistrer" action="#{factureBean.EnregistrerFactureBo()}" update="panel" icon="ui-icon-check" ajax="false">
                        </p:commandButton>
     
                    </h:panelGrid>
                </p:panel>
            </h:form>

    J'arrive à ajouter la facture à la base de données, mais qu'on je fais un select sur le nom du fournisseur par exemple depuis la table fournisseur, on m'affiche qu'in y a 10 lignes sélectionnées mais je n'arrive pas à les visualiser. Quelqu'un a une idée sur le problème s'il vous plait?

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Quelques commentaires sur le code :
    - déjà, modifie tous les noms de méthode pour mettre leur première lettre en minuscule
    - pareil pour tes noms de variables : la majuscule en début de nom est réservé pour les noms de classe (crois moi, c'est plus clair après)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    public String EnregistrerFactureBo()
        {
            // Informations concernant le fournisseur:
            fournisseur.setSociete(fournisseur.getSociete()); // setter des valeurs à partir du getter du même objet : ça ne sert à rien !
            fournisseur.setAdresse(fournisseur.getAdresse()); // pareil ici
            fournisseur.setEmail(fournisseur.getEmail()); // pareil ici
     
            Engagement e = factureDao.Find_Engagement(IdEngagement);
            Statut s = factureDao.Find_Statut(IdStatut);
            Utilisateur u = factureDao.Find_Utilisateur(CodeUtilisateur);
            Fournisseur f = fournisseurDao.AjoutFournisseur(fournisseur);
     
            if(f!=null) // f ne peut pas être null vu que ta méthode AjoutFournisseur renvoie l'instance de Fournisseur que tu lui as passée.. Du coup pas besoin de la récupérer non plus en retour de méthode. Tu peux juste faire fournisseurDao.AjoutFournisseur(fournisseur) qui ne renvoie rien.
            {
     
            Date date = new Date( System.currentTimeMillis() ); // quand tu fais un new Date() ou un new Date (System.currentTimeMillis() ), tu obtiens la même chose. Choisis la notation courte !
            // SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy hh:mm:ss" );
            // System.out.println( sdf.format( date ) );
     
            facture.setNumeroFacture(facture.getNumeroFacture()); // setter/getter sur soi-même : inutile
            facture.setReference(facture.getReference()); // pareil
            facture.setEngagement(e);
            facture.setFournisseur(fournisseur);
            facture.setMontant(facture.getMontant()); // pareil
            facture.setStatut(s);
            facture.setUtilisateur(u);  
     
            facture.setDateReceptionPhysique(date);
            facture.setDateReceptionSysteme(date);
            }
     
            Boolean resultat = factureDao.EnregistrerBo(facture); // l'autoboxing, on peut s'en passer, je reviens dessus plus bas
     
            if(resultat==true) // tu as un type boolean, utilises la notation if(resultat) directement si tu veux tester la valeur "true"
            {
                return "index";
            }
            else
            {
                return "echec";
            }
     
        }

    A propos de l'autoboxing : dans ta méthode public EnregistrerBo, tu déclares ceci :
    public Boolean EnregistrerBo(Facture f) et pourtant à la fin, tu renvoie "return true;" soit le type primitif de boolean et non son "Wrapper" (conteneur) qu'est Boolean.
    Ce qui se passe à l'exécution, c'est que ton "return true" est transformé en return Boolean.valueOf(true), et dans ta méthode, tu utilises ce Boolean en faisant if (myBool == true) ce qui est transformé en if (myBool.booleanValue() == true).
    Vu que tu manipules un type primitif et que tu n'as pas besoin d'avoir une valeur renvoyée valant null qui ait un sens, modifie ta signature de méthode en :
    public boolean enregistrerBo(Facture f)
    Ca sera plus efficace et ça t'évitera des erreurs moches du type NullPointerException difficiles à retrouver ensuite.


    Revenons maintenant à ta question initiale :
    Quand tu dis que tu fais un "select", tu parles en base de données ou un composant HTML select de type liste déroulante (que je ne vois pas dans ta page)? Et à quel endroit est-ce que tu ne "vois pas" les données? La page que tu nous a donné ici nous permet de voir la page de saisie et l'enregistrement, mais pas le chargement initial, c'est peut-être une piste.
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Merci tout d'abord eulbobo pour l'intérêt que tu as porté à mon problème.
    Je ferai les modifications citées dans tes remarques .
    Quant au select, je le fais au niveau de la base de données, vu que je travaille avec oracle, je fais un "select societe from fournisseur", et le résultat c'est qu'on m'affiche des lignes vides, comme quoi il y'a des enregistrements mais il ne sont tout simplement pas affichés

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Essayes de faire un "select * from fournisseur" pour voir si tout est vide ou pas

    Ensuite, il faut savoir que les notations pour accéder aux valeurs du type #{monBean.maValeur} ont tendance à ne pas marcher sur plus d'un niveau : utiliser la notation #{monBean.monObjet.maValeur} n'est pas une bonne idée (ça je le dis aussi bien d'expérience que pour une question de lisibilité).

    Ce que tu peux tenter, c'est d'utiliser un ManagedBean qui serait une "vue" de ton Objet fournisseur, ou dans lequel tu mettrais des getter/setter correspondant à l'objet qui est stocke (bref, tu fais un wrapper ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    package Beans;
     
    import Entités.Fournisseur; // au fait : évite les accent ou les caractères spéciaux dans le nom de tes packages/classes... Et tout en minuscule les packages aussi, ça aide la lisibilité encore une fois
    import javax.faces.bean.ManagedBean;
     
    @ManagedBean
    public class FournisseurBean {
     
        private Fournisseur fournisseur = new Fournisseur();
     
        // Constructeur:
     
        public FournisseurBean() {
            this.fournisseur = new Fournisseur();
        }
     
     
        // Setters et Getters:
     
        public Fournisseur getFournisseur() {
            return fournisseur;
        }
     
        public void setFournisseur(Fournisseur fournisseur) {
            this.fournisseur = fournisseur;
        }
     
        public void setSociete(String societe){
            fournisseur.setSociete(societe);
        }
     
        public void setAdresse(String adresse){
            fournisseur.setAdresse(adresse);
        } 
     
        public void setEmail(String email){
            fournisseur.setEmail(email);
        }
     
        public String getSociete(){
            return fournisseur.setSociete();
        }
     
        public String getAdresse(){
            return fournisseur.getAdresse();
        } 
     
        public String getEmail(){
            return fournisseur.getEmail();
        }
     
    }
    et tu l'appelles dans ta JSF avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p:inputText  id="AdresseFournisseur" label="AdresseFournisseur" value="#{fournisseurBean.adresse}" required="true">
    Et normalement, ça devrait marcher.
    Je ne suis pas mort, j'ai du travail !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Quand je fais un "select * from fournisseur" j'obtiens juste les idFournisseurs. Quant à l'adresse et le societe elles sont vides.
    Et on m'indique qu'il y'a 17 enregistrements, c'est à dire qu'il y a bel et bien une insertion.
    Et j'ai déjà essayé le wrapper, en vain: l'input dans lequel je fais appel à l'adresseFournisseur et toujours vide.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 87
    Points : 117
    Points
    117
    Par défaut
    tu dois passé par un converter c'est la solution pour votre probleme

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Je ne pense pas que ça soit un problème de conversion monta_amri, puisque j'arrive à récupérer l'objet fournisseur et le faire passer en paramètre à facture

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu te rends compte que ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            fournisseur.setSociete(fournisseur.getSociete());
            fournisseur.setAdresse(fournisseur.getAdresse());
            fournisseur.setEmail(fournisseur.getEmail());
    ne fait strictement rien? Il copie fournisseur sur fournisseur. Soit fournisseur n'est pas vide au départ donc on se demande bien ce que tu essaie de faire. Soit il est vide au départ et il sera toujours aussi vide à l'arrivée...

    Et tu fais la même erreur plus bas avec ta facture: tu copie facture sur facture.....

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Et comment devrai-je procéder pour pouvoir récupérer les valeurs passées en formulaire?

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    JSF les as stockée, pour le fournisseur, dans #{fournisseurBean.fournisseur

    C'est donc dans FournisseurBean qu'il faut aller les récupérer.

    A noter que tu te fourvoie. Même si jsf ne t'empêche pas de le faire, il vaut mieux éviter de mixer plein de beans dans le même formulaire, parce qu'après c'est une soupe pour récupérer tous les morceaux comme tu commence à le constater T'as une bout de tes donnés dans le FournisseurBean, et un bout dans le FactureBean.

    Crée un seul bean, genre FactureEditBean, qui contient un champ fournisseur, un champ facture et une méthode save(), tout simplement
    Tu verra que pour débuter c'est plus facile de faire un bean par formulaire. Ensuite tu pourra regarder à factoriser ton code, mais commence par l'essentiel.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    D'accord, et que doit contenir cette méthode save() s'il te plait?

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben le même genre de code que ta méthode actuele, mais il aura pas besoin de faire ta soupe actuelle...

  13. #13
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2014
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    C'était justement ça le problème, une fois mélanger deux ManagedBean c'est la galère après.
    Merci infiniment Tchize, tu m'as sauvée la vie.
    Je ferme la discussion alors, et je vous remercie pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'insertion dans une table sous oracle
    Par admcent dans le forum Administration
    Réponses: 4
    Dernier message: 24/10/2007, 14h58
  2. Problème d'insertion dans une table Access
    Par tribaleur dans le forum ASP
    Réponses: 21
    Dernier message: 27/06/2006, 09h20
  3. Problème d'insertion dans une table filtrée.
    Par charlie289 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 17h45
  4. [MySQL] Problème d'insertion dans une table
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 18h43
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 12h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo