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 :

QtScript et QxOrm : dynamicité


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 QtScript et QxOrm : dynamicité
    Bonjour,

    Nouvel utilisateur de QxOrm, j'ai un cas d'utilisation assez difficile à concevoir et j'aimerais bien quelques conseils...

    Actuellement, je suis en train de concevoir une application de gestion de formulaires, j'ai intégré le scripting de mes feuilles et j'aimerais bien permettre à un utilisateur lambda de concevoir sa base de donnée par le biais d'un script javascript...

    Bon. J'espère que ce n'est pas trop confus car je suis encore en train de réfléchir à cette fonctionnalité aux contours encore flous.

    J'aimerais créer un objet FormElementMapper avec certaines fonctions exposées en javascript qui me permette de définir le mapping entre une table SQL et les propriétés de mes éléments de mon formulaire.

    En somme, j'aimerais savoir s'il est possible de définir une structure de base de donnée dynamiquement.

  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


    J'avoue que je ne comprend pas exactement ce que tu souhaites faire.

    Ce que je peux te répondre pour le moment : toutes les classes et propriétés enregistrées dans le contexte QxOrm sont disponibles pour le moteur d'introspection => tu peux donc facilement parcourir l'ensemble des classes et propriétés et construire ainsi ton schéma SQL.
    Voici 2 liens qui pourront peut-être t'aider :
    - http://www.qxorm.com/qxorm_fr/faq.html#faq_190
    - http://www.qxorm.com/qxorm_fr/faq.html#faq_230

    Concernant QtScript, je ne connais pas trop, mais je pense que ça doit être assez facile de créer une interface pour manipuler les objets de QxOrm depuis un script => ça pourrait peut-être être intéressant à implémenter dans une prochaine version de QxOrm, à voir...

    Je ne sais pas si ça répond à ta question.
    Si non, essaye de donner un exemple concret avec un peu de code...
    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, désolé;

    Ma question porte plus sur comment faire pour déclarer le mapping d'un objet qu'on ne connait pas à l'avance au moment de l'exécution... C'est un peu comme QDataWidgetMapper ( http://doc.qt.nokia.com/stable/sql-sqlwidgetmapper.html )

    En gros, j'aimerais pouvoir dire à l'execution, maintenant je veux que tel champ de type t soit relié à tel champ de telle table.

    Si tu as un exemple, je suis GRANDEMENT preneur !
    C'est assez crucial...

    Maintenant, pour rentrer dans les détails, voici un exemple de ce que je voudrais faire:

    Mon formulaire est composé de pages, qui sont composées de sections, et dans chaque section, il y a des widgets divers et personnalisés. Chaque widget a des propriétés contenues dans une map de ma conception.

    dans mon code javascript, il y aurait un truc de ce style:
    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
     
    function mapToDatabase( doc )
    {
        mapper = doc.getDatabaseMapper();
        mapper.newTable( 'FormDoc' );
        // On récupère la page
        page1 = doc.getElementById('page1');
        // On crée la table FormPage qui stockera les pages
        mapper.newTable( 'FormPage' );
        // On crée une relation entre une page et son document parent (clé étrangère si je me trompe pas)
        mapper.setRelation( 'FormPage', 'FormPage.docId', 'FormDoc.id' );
        with( page1 )
        {
            // On récupère la section
            sectionBody = page1.getElementById( 'body' );
            mapper.newTable( 'FormSection' );
            mapper.setRelation( 'FormSection', 'FormSection.pageId', 'FormPage.id' );
            with( sectionBody )
            {
                 lineedit1 = getElementById( 'lineedit1' );
                 // Creation de la table Widget
                 mapper.newTable( 'Widget' );
                 mapper.setRelation( 'Widget', 'Widget.sectionId', 'FormSection.id' );
                 // On mappe le widget et toutes ses propriétés (non qt, géré avec une map perso)
                 mapper.mapWidget( 'Widget', lineedit1 );
            }
            // Mapping de propriétés diverses
            mapper.map( 'FormSection', 'FormSection.width', sectionBody.width );
            mapper.map( 'FormSection', 'FormSection.height', sectionBody.height );
        }
        // Mapping de propriétés diverses
        mapper.map( 'FormPage', 'FormPage.numPage', page1.numPage );
        mapper.map( 'FormPage', 'FormPage.pageFormat', page1.pageFormat );
    }
    Voila, j'ai fait de mon mieux pour expliquer...
    Merci de ton attention !

  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
    Tu ne pourras pas faire comme ça avec QxOrm : la fonction de mapping "qx::register_class<T>(...)" est indispensable => ton mapping entre les objets C++ et les tables de la BDD doit être effectué à cet endroit.

    Donc à l'exécution du programme, tu ne pourras pas créer ou modifier un mapping.

    Si je comprends bien, tu veux créer une sorte de questionnaires paramétrables : dans ce cas, je ne pense pas que laisser à l'utilisateur la possibilité de créer de nouvelles tables soit une bonne solution.

    Tu peux très bien enregistrer le paramétrage d'un questionnaire dans une table à toi, par exemple un flux XML => ça QxOrm sait très bien le faire.

    Pourquoi veux-tu laisser la possibilité à l'utilisateur de jouer avec la base de données ? C'est très risqué je trouve !
    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.

  5. #5
    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
    En fait, je suis en train de faire un SDK pour la création de formulaire (ou plus), en gros, je voudrais faire un ensemble logiciel type filemaker, mais opensource et compatible linux.

    http://www.filemaker.fr/

    Dommage que je ne puisse pas faire ça avec QxOrm
    Ca avait l'air si bien !

    Bon... Pas grave, je vais me pencher sur Qt...

    Tu n'aurais pas une idée de lib pour faire ça ?

    En tout cas, merci !

  6. #6
    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
    Tu n'aurais pas une idée de lib pour faire ça ?
    Non désolé, je ne connais pas de lib qui pourrait t'aider à résoudre ton problème.
    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.

Discussions similaires

  1. QtScript et les performances
    Par Xeroth dans le forum Qt
    Réponses: 2
    Dernier message: 07/02/2010, 12h50
  2. Google V8 vs QtScript
    Par epsilon68 dans le forum Qt
    Réponses: 6
    Dernier message: 24/07/2009, 23h27
  3. QtScript information s
    Par jderam dans le forum Débuter
    Réponses: 3
    Dernier message: 04/05/2009, 23h08
  4. Utilisation de QtScript
    Par buzzkaido dans le forum Qt
    Réponses: 2
    Dernier message: 25/02/2009, 11h47

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