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 :

Compilation de projet de base


Sujet :

QxOrm

  1. #1
    Membre averti
    Avatar de Architekth
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 123
    Points : 301
    Points
    301
    Par défaut Compilation de projet de base
    Salut à tous,

    voilà j'ai un souci... ça fait quelques heures que je trime dessus et soi je suis con, suis j'ai zapé un truc. Toujours est-il que je vois pas le problème. Voici mon code :

    Test_QxOrm.pro
    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
     
    # Indiquez le chemin vers le fichier QxOrm.pri
    include(D:/STAGE/QxOrm_1.2.1/QxOrm/QxOrm.pri)
     
    QT += sql
    DEFINES += _BUILDING_QX_TEST
    PRECOMPILED_HEADER = precompiled.h
    CONFIG += console
    CONFIG(debug, debug|release){
        LIBS += -l"QxOrmd"
    } else {
        LIBS += -l"QxOrm"
    }
    SOURCES += \
        main.cpp \
        MyWnd.cpp \
        Person.cpp \
        SQLManager.cpp
     
    HEADERS += \
        MyWnd.h \
        Person.h \
        SQLManager.h \
        export.h \
        precompiled.h
    export.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef EXPORT_H
    #define EXPORT_H
     
    #ifdef _BUILDING_QX_TEST
    #define QX_REGISTER_HPP_PERSON QX_REGISTER_HPP_EXPORT_DLL
    #define QX_REGISTER_CPP_PERSON QX_REGISTER_CPP_EXPORT_DLL
    #else
    #define QX_REGISTER_HPP_PERSON QX_REGISTER_HPP_IMPORT_DLL
    #define QX_REGISTER_CPP_PERSON QX_REGISTER_CPP_IMPORT_DLL
     
    #endif
     
    #endif // EXPORT_H
    Person.h
    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
     
    #ifndef PERSON_H
    #define PERSON_H
     
    class Person
    {
    public:
        Person();
        virtual ~Person() {}
     
    public:
        long id;
        QString name;
        QString surname;
     
    private:
    };
     
    QX_REGISTER_HPP_PERSON(Person, qx::trait::no_base_class_defined, 0) // Le problème semble être ici
     
    #endif // PERSON_H
    Person.cpp
    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
     
    #include "Person.h"
    #include "precompiled.h"
     
    QX_REGISTER_CPP_PERSON(Person) // Problème probablement ici aussi
     
    namespace qx
    {
        template <> void register_class(QxClass<Person> &t)
        {
            t.id(&Person::id, "id");
            t.data(&Person::name, "name");
            t.data(&Person::surname, "desc");
        }
    }
     
     
    Person::Person()
        : id(0)
    {
     
    }
    precompiled.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef PRECOMPILED_H
    #define PRECOMPILED_H
     
    #include <QxOrm.h>
     
    #include "export.h"
     
    #endif // PRECOMPILED_H
    Erreur de compilation :
    * expected identifier before string constant ||||| Person.cpp 4
    * expected ',' or '...' before string constant ||||| Person.cpp 4
    * expected constructor, destructor, or type conversion before 'qx' ||||| Person.cpp 4

    Si vous avez une idée n'hésitez pas.

    OS: Windows 7 x 64
    Compilateur : MinGW utilisé avec QtCreator
    Version Qt : 4.7.4

  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 mieux est que tu zippes ton projet et que tu l'ajoutes sur ce thread.
    Comme ça je pourrai le corriger et t'expliquer ce qui ne va pas...
    Je te joindrai un autre projet avec toutes les corrections et tu pourras comparer les différences (avec WinMerge, UltraCompare, WinDiff, etc...).

    Pour le moment, juste un truc à corriger : dans ton fichier Person.cpp, la ligne #include "precompiled.h" doit être la 1ère ligne de ton fichier.
    C'est comme ça que la notion de precompiled header fonctionne en C++ : tu dois inclure le precompiled header en 1er sur chaque fichier source (*.CPP).

  3. #3
    Membre averti
    Avatar de Architekth
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 123
    Points : 301
    Points
    301
    Par défaut
    D'accord merci pour ta réponse! Oui j'ai corrigé cette faute d'inattention.

    Pour le reste j'ai corrigé mon problème. Il suffisait d'inclure :

    dans le fichier Person.cpp. Maintenant ça compile parfaitement.

    Une autre question cela dit.

    Est-ce normal que qx::QxSqlDatabase::getSingleton()->isValid() est 'private'? Comment puis-je vérifier par exemple que mon Driver à bien été défini? Dans Qt, QSqlDatabase::isValid() est accessible. De plus, on a la méthode QSqlDatabase::open() qui renvoi 'true' si la connexion à bien été ouverte. Y a t'il quelques choses de similaire avec QxSqlDatabase? Je n'ai pas trouvé.

  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
    Maintenant ça compile parfaitement.
    Oki cool

    Est-ce normal que qx::QxSqlDatabase::getSingleton()->isValid() est 'private'? Comment puis-je vérifier par exemple que mon Driver à bien été défini? Dans Qt, QSqlDatabase::isValid() est accessible. De plus, on a la méthode QSqlDatabase::open() qui renvoi 'true' si la connexion à bien été ouverte. Y a t'il quelques choses de similaire avec QxSqlDatabase? Je n'ai pas trouvé.
    Si tu veux vérifier la connexion à ta BDD, tu peux utiliser la méthode static suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static QSqlDatabase qx::QxSqlDatabase::getDatabase()
    Comme tu peux le voir, cette méthode renvoie un QSqlDatabase, tu auras donc toutes les méthodes fournies par Qt...
    Voici un lien vers la doc de la classe :
    http://www.qxorm.com/doxygen/html/cl..._database.html

  5. #5
    Membre averti
    Avatar de Architekth
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 123
    Points : 301
    Points
    301
    Par défaut
    D'accord merci! Pile ce qu'il me fallait

    Et super travail pour la bibliothèque! Très utile! Je commence tout juste à l'utiliser mais c'est plutôt facile à prendre en main. Juste le début avec les fichiers à configurer (.pro/.pri) et les macro (export.h) est un peu dure a assimiler. Enfin je dois avoué que je suis pas trop habitué étant donnée que j'ai l'habitude de me contenter de ce que Qt me fourni à la base !


  6. #6
    Membre averti
    Avatar de Architekth
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 123
    Points : 301
    Points
    301
    Par défaut
    J'aurai une question supplémentaire... Quand on initialise les différents paramètres de connexion comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        qx::QxSqlDatabase::getSingleton()->setDriverName("QMYSQL");
        qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
        qx::QxSqlDatabase::getSingleton()->setDatabaseName("myDB");
        qx::QxSqlDatabase::getSingleton()->setUserName("root");
        qx::QxSqlDatabase::getSingleton()->setPassword("");
    Et qu'on réalise une requête tel que, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QSqlError queryError = qx::dao::create_table<Person>();
    Comment est réalisé la connexion/déconnexion à la base de donnée?
    Est-ce ainsi ?

    Paramètre de connexion (host, db, username, password) initialisé ->>>>> requête via qx::dao (connexion >>> requête >>> déconnexion)

    C'est à dire, est-ce que la connexion s'effectue lors de la requête (juste avant évidement) (qx::dao::create_table<Person>(); ou qx::dao::insert(person1); ou autre...) puis déconnexion lorsque la requête est effectuée? Ou le processus de connexion/déconnexion est effectué différemment?

    En bref, j'aimerai savoir si le processus de connexion/déconnexion est géré en interne ou si comme avec QSqlDatabase il me faut gérer le 'open()' et 'close()'.

  7. #7
    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'aurai une question supplémentaire...
    Pense à créer un nouveau topic sur le forum pour chaque question ou problème que tu peux rencontrer

    En bref, j'aimerai savoir si le processus de connexion/déconnexion est géré en interne ou si comme avec QSqlDatabase il me faut gérer le 'open()' et 'close()'.
    Tout est géré automatiquement par la bibliothèque QxOrm.
    Il y a également un mécanisme qui va créer une connexion par thread, car la classe QSqlDatabase de Qt nécessite une connexion par thread pour fonctionner correctement (indispensable si tu travailles en multi-thread).
    Mais tu n'as pas à te soucier de tout ça, c'est géré automatiquement par la bibliothèque QxOrm.

    Remarque : si tu n'aimes pas le mécanisme de connexion par défaut, ou que tu veux l'améliorer, ou que tu veux gérer ton propre pool de connexions, il est possible de passer le paramètre optionnel QSqlDatabase * pDatabase disponible pour chaque fonction qx::dao::.... Ainsi, c'est ta propre connexion à la BDD qui sera utilisée pour effectuer la requête. Si tu laisses ce paramètre à NULL (comportement par défaut) alors c'est la bibliothèque QxOrm qui prend en charge la connexion.

  8. #8
    Membre averti
    Avatar de Architekth
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 123
    Points : 301
    Points
    301
    Par défaut
    Merci beaucoup pour ta réponse clair et rapide!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/04/2009, 19h34
  2. projet de base Interbase 7.5 avec images
    Par KRis dans le forum InterBase
    Réponses: 8
    Dernier message: 13/06/2005, 10h17
  3. [CVS] compiler un projet cvs?
    Par tomburn dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 30/03/2005, 10h12
  4. compiler un projet
    Par piscine dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/09/2004, 14h05
  5. Comment compiler un projet en ligne de commande ?
    Par mathieutlse dans le forum EDI
    Réponses: 3
    Dernier message: 11/07/2003, 13h32

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