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

QxOrm Discussion :

Problème avec une relation et le fetch en cascade


Sujet :

QxOrm

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut Problème avec une relation et le fetch en cascade
    Hello !

    Je suis en train de faire des tests sur le fetch en cascade, et je me heurte à un souci: je ne parviens pas encore à savoir s'il s'agit d'un bug QxOrm ou pas.

    C'est simple, j'ai simplement un relation de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.relationOneToMany( &Form::pages, "list_pages", "doc_id" );
    Où pages est une Mon problème est simple c'est que le fetch ne me conserve pas l'ordre dans lequel sont placés et enregistrés les éléments, du coup, mes pages sont dans le desordre.

    Le problème est plus gênant pour les sections de mes pages pour lesquelles je n'enregistre pas d'indice...

    Le problème n’apparaît pas lorsque je fais les choses à la main.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut


    le fetch ne me conserve pas l'ordre dans lequel sont placés et enregistrés les éléments, du coup, mes pages sont dans le desordre...
    Le problème n’apparaît pas lorsque je fais les choses à la main.
    Je pense qu'il va falloir que tu détailles un peu plus :
    - peux-tu nous montrer ton appel stp (je suppose fetch_by_id, fetch_by_query ou fetch_all) ;
    - peux-tu nous montrer la requête SQL générée par QxOrm stp ;
    - enfin, quand tu dis 'je fais les choses à la main', ça veut dire quoi ?

    Si c'est un problème de tri, on peut facilement ajouter ORDER BY à la requête SQL...
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Ok, c'est bon ! Ton idée a fonctionnée

    Voici ce que j'ai fait:
    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
    MangooForm::Ptr loadForm( const QString & docId )
    {
        using namespace tango::sql;
        MangooForm::Ptr dbForm( new MangooForm() );
        qx::QxSqlQuery query;
        query.where( "MangooForm.doc_id" ).isEqualTo( docId )
             .orderAsc( QStringList() << "FormPage.page_id" << "FormSection.section_id" );
        QSqlError err = qx::dao::fetch_by_query_with_relation( "list_pages->list_sections->list_components", query, dbForm );
        THROW_IF_SQL_ERROR( err, "Unable to load form document!" );
     
        if ( !dbForm.get() )
        {
            BOOST_THROW_EXCEPTION( tango::exception::Exists() << tango::exception::dev() + _tgr( "Form with id " ) + docId.toStdString() + _tgr(" not found!") );
        }
     
        // Load pages
        BOOST_FOREACH( const FormPage::Ptr & page, dbForm->pages )
        {
            BOOST_FOREACH( const FormSection::Ptr & section, page->sections )
            {
                BOOST_FOREACH( const FormComponent::Ptr & formComponent, section->components )
                {
                    mangoo::db::fillFormComponentProperties( formComponent );
                }
            }
        }
        return dbForm;
    }

    Et qui m'évite ce code:
    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
    MangooForm::Ptr loadForm( const QString & docId )
    {
        using namespace tango::sql;
        MangooForm::Ptr dbForm( new MangooForm() );
        dbForm->uniqueId = docId;
        QSqlError err = qx::dao::fetch_by_id( dbForm );
        THROW_IF_SQL_ERROR( err, "Unable to load form document!" );
     
        // Load pages
        QList<FormPage::Ptr> pages;
        {
            qx::QxSqlQuery query( "WHERE FormPage.doc_id = :doc_id" );
            query.bind( ":doc_id", dbForm->uniqueId );
            QSqlError err = qx::dao::fetch_by_query( query, pages );
            THROW_IF_SQL_ERROR( err, "Unable to load form pages!" );
        }
        BOOST_FOREACH( const FormPage::Ptr & page, pages )
        {
            dbForm->pages.append( page );
            page->doc = dbForm;
            // Load sections
            QList<FormSection::Ptr> sections;
            {
                qx::QxSqlQuery query( "WHERE FormSection.page_id = :page_id" );
                query.bind( ":page_id", (int)page->id );
                QSqlError err = qx::dao::fetch_by_query( query, sections );
                THROW_IF_SQL_ERROR( err, "Unable to load form section!" );
            }
            BOOST_FOREACH( const FormSection::Ptr & section, sections )
            {
                page->sections.append( section );
                section->page = page;
                // Load sections
                QList<FormComponent::Ptr> components;
                {
                    qx::QxSqlQuery query( "WHERE FormComponent.section_id = :section_id" );
                    query.bind( ":section_id", (int)section->id );
                    QSqlError err = qx::dao::fetch_by_query( query, components );
                    THROW_IF_SQL_ERROR( err, "Unable to load form component!" );
                }
                BOOST_FOREACH( const FormComponent::Ptr & formComponent, components )
                {
                    section->components.append( formComponent );
                    formComponent->section = section;
                    mangoo::db::fillFormComponentProperties( formComponent );
                }
            }
        }
        return dbForm;
    }


    MERCI QxOrm 1.2.4 !!! C'est excellent

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    MERCI QxOrm 1.2.4 !!! C'est excellent
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

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

Discussions similaires

  1. Problème avec une relation ManytoMany
    Par GodziFP dans le forum Hibernate
    Réponses: 2
    Dernier message: 25/08/2014, 12h50
  2. Réponses: 2
    Dernier message: 11/02/2013, 13h22
  3. Réponses: 3
    Dernier message: 01/08/2012, 19h59
  4. Problème avec une relation many-to-many
    Par jillthe1 dans le forum Doctrine2
    Réponses: 9
    Dernier message: 19/12/2011, 21h05
  5. Problème avec une relation maître détail
    Par nb-wissam dans le forum Forms
    Réponses: 2
    Dernier message: 15/06/2010, 11h03

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