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

  1. #1
    Nouveau membre du Club
    Compilation du code généré par QxEntityEditor
    Bonsoir,

    Je parviens à compiler ce que génère QxEE, pour obtenir les librairies.
    A la suite de quoi, j'ai:
    dans le répertoire BaseAgri/QxBase/bin la librairie libBaseAgrid.so.1.0.0 (14.7 Mo)
    dans le répertoire BaseAgri/QxModel/bin la librairie libBaseAgriModeld.so.1.0.0 (16.8 Mo)
    et dans BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug
    BaseAgri_main.model_view.gen.o oCulture.model_view.o
    Makefile oParam.model_view.gen.o
    moc_oBande.model_view.gen.cpp oParam.model_view.o
    oBande.model_view.gen.o oStIntOb.model_view.gen.o
    oBande.model_view.o oStIntOb.model_view.o
    oCulture.model_view.gen.o

    C'est à partir de là que je construis mon projet BaseAgri, en veillant à ne plus toucher
    ni à ce qui a été généré ni a ce qui a été compilé dans QxBase, dans QxModel ou dans les fichiers
    listés ci-dessus dans BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug
    J'obtiens une compilation, mais pas le link.

    Je crois avoir passé tous les tutoriels et videos que j'ai pu trouver, mais (ce doit être trivial)
    je n'ai rien trouvé, au delà des compilations et générations des librairies, comment les utiliser
    dans un projet. (je prends comme hypothèse que les classes à utiliser sont celles décrites dans
    les o*.gen.h ...)
    Pour le precompiled.h, j'ai du passer toutes les combinaisons possibles des différents .h générés.
    Actuellement j'ai:
    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 PRECOMPILED_H
    #define PRECOMPILED_H
     
    #include <QxOrm.h>
    #include "export.h"
     
    #include "QxBase/include/BaseAgri_export.gen.h"
    //#include "QxBase/custom/include/BaseAgri_precompiled_header.h"
     
    //#include "QxModel/include/BaseAgri_export.model_view.gen.h"
    //#include "QxModel/custom/include/BaseAgri_precompiled_header.model_view.h"
     
     
    #endif // PRECOMPILED_H

    Pour les exports aussi.

    BaseAgri.pro est:
    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
     
    #-------------------------------------------------
    #
    # Project created by QtCreator 2015-06-29T21:41:59
    #
    #-------------------------------------------------
     
    QT       += core gui sql
     
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     
    TARGET = BaseAgri
    TEMPLATE = app
    CONFIG += C++11
    CONFIG += precompile_header
    PRECOMPILED_HEADER = precompiled.h
     
    SOURCES += main.cpp\
    #    build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/moc_mainwindow.cpp \
        mainwindow.cpp \
        taccesdao.cpp \
        bureaudelegate.cpp
     
    HEADERS  += \
        mainwindow.h \
    #    QxBase/include/oBande.gen.h \
    #    QxBase/include/oCulture.gen.h \
    #    QxBase/include/oParam.gen.h \
    #    QxBase/include/oStIntOb.gen.h \
        taccesdao.h \
        bureaudelegate.h
     
    INCLUDEPATH += ./../Libs/QxOrm/include/
     
    FORMS    += \
        mainwindow.ui
     
    #LIBS += -L/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/lib -lQxOrmd -lboost_serialization
    LIBS += -lboost_serialization
     
    unix:!macx: LIBS += -L$$PWD/../Libs/QxOrm/lib/ -lQxOrmd
     
    INCLUDEPATH += $$PWD/../Libs/QxOrm/include
    DEPENDPATH += $$PWD/../Libs/QxOrm/include
     
    INCLUDEPATH += $$PWD/QxBase/include
    DEPENDPATH += $$PWD/QxBase/include
     
    INCLUDEPATH += $$PWD/QxModel/include
    DEPENDPATH += $$PWD/QxModel/include
     
    OTHER_FILES += \
        Erreurs.txt \
        Messages.txt

    Que je mette en commentaire ou pas les "QxBase/include/o*.gen.h", j'obtiens le même résultat.

    Cela peut provenir du fait que dans oParam.gen.h par exemple, sur le 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
     
    #ifndef _BASEAGRI_OPARAM_H_
    #define _BASEAGRI_OPARAM_H_
     
    class oStIntOb;
    class oCulture;
     
    class BASEAGRI_EXPORT oParam
    {
     
       QX_REGISTER_FRIEND_CLASS(oParam)
     
    public:
     
       typedef qx::QxCollection<long, boost::shared_ptr<oStIntOb> > type_list_of_oStIntOb;
    ...

    j'ai sur BASEAGRI_EXPORT un warning avec en popup "skip identifier BASEAGRI_EXPORT"
    et la ligne QX_REGISTER_FRIEND_CLASS(oParam) est soulignée en rouge (popup "expected a declaration")

    ... mais je ne vois pas la cause de cela.

    Je suis:
    - Nettoyer le projet "BaseAgri"
    - Recompiler le projet "BaseAgri"
    J'obtiens:
    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
     
    21:58:30: Exécution des étapes pour le projet BaseAgri...
    21:58:30: Débute : "/usr/bin/make" clean
    rm -f moc_mainwindow.cpp moc_bureaudelegate.cpp
    rm -f ui_mainwindow.h
    rm -f main.o mainwindow.o taccesdao.o bureaudelegate.o moc_mainwindow.o moc_bureaudelegate.o
    rm -f BaseAgri.gch/c BaseAgri.gch/c++
    rm -f *~ core *.core
    21:58:30: Le processus "/usr/bin/make" s'est terminé normalement.
    21:58:30: Configuration inchangée, étape qmake sautée.
    21:58:30: Débute : "/usr/bin/make"
    /home/cs/Qt/5.3/gcc/bin/uic ../mainwindow.ui -o ui_mainwindow.h
    g++ -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -x c++-header -c ../precompiled.h -o BaseAgri.gch/c++
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o main.o ../main.cpp
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o mainwindow.o ../mainwindow.cpp
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o taccesdao.o ../taccesdao.cpp
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o bureaudelegate.o ../bureaudelegate.cpp
    /home/cs/Qt/5.3/gcc/bin/moc -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/home/cs/Qt/5.3/gcc/mkspecs/linux-g++ -I/home/cs/Bureau/AteliersLogiciels/BaseAgri -I/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/include -I/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxBase/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxModel/include -I/home/cs/Qt/5.3/gcc/include -I/home/cs/Qt/5.3/gcc/include/QtWidgets -I/home/cs/Qt/5.3/gcc/include/QtSql -I/home/cs/Qt/5.3/gcc/include/QtGui -I/home/cs/Qt/5.3/gcc/include/QtCore -I. ../mainwindow.h -o moc_mainwindow.cpp
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o moc_mainwindow.o moc_mainwindow.cpp
    /home/cs/Qt/5.3/gcc/bin/moc -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/home/cs/Qt/5.3/gcc/mkspecs/linux-g++ -I/home/cs/Bureau/AteliersLogiciels/BaseAgri -I/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/include -I/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxBase/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxModel/include -I/home/cs/Qt/5.3/gcc/include -I/home/cs/Qt/5.3/gcc/include/QtWidgets -I/home/cs/Qt/5.3/gcc/include/QtSql -I/home/cs/Qt/5.3/gcc/include/QtGui -I/home/cs/Qt/5.3/gcc/include/QtCore -I. ../bureaudelegate.h -o moc_bureaudelegate.cpp
    g++ -c -include BaseAgri -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I../../Libs/QxOrm/include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -I. -I. -I. -o moc_bureaudelegate.o moc_bureaudelegate.cpp
    g++ -Wl,-rpath,/home/cs/Qt/5.3/gcc -Wl,-rpath,/home/cs/Qt/5.3/gcc/lib -o BaseAgri main.o mainwindow.o taccesdao.o bureaudelegate.o moc_mainwindow.o moc_bureaudelegate.o   -lboost_serialization -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/../Libs/QxOrm/lib/ -lQxOrmd -L/home/cs/Qt/5.3/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Gui -lQt5Core -lGL -lpthread
    mainwindow.o: In function `qx::QxModel<oParam>::init()':
    Makefile:202: recipe for target 'BaseAgri' failed
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/../../Libs/QxOrm/include/QxModelView/QxModel.h:185: undefined reference to `qx::QxSingleton<qx::QxClass<oParam> >::getSingleton()'
    mainwindow.o: In function `qx::QxModel<oCulture>::init()':
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/../../Libs/QxOrm/include/QxModelView/QxModel.h:185: undefined reference to `qx::QxSingleton<qx::QxClass<oCulture> >::getSingleton()'
    mainwindow.o: In function `qx::QxModel<oStIntOb>::init()':
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/../../Libs/QxOrm/include/QxModelView/QxModel.h:185: undefined reference to `qx::QxSingleton<qx::QxClass<oStIntOb> >::getSingleton()'
    mainwindow.o: In function `qx::QxModel<oStIntOb>::insertRows(int, int, QModelIndex const&)':
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/../../Libs/QxOrm/include/QxModelView/QxModel.h:267: undefined reference to `oStIntOb::oStIntOb()'
    mainwindow.o: In function `qx::QxModel<oStIntOb>::qxFetchById(QVariant const&, QStringList const&, QSqlDatabase*)':
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/../../Libs/QxOrm/include/QxModelView/QxModel.h:308: undefined reference to `oStIntOb::oStIntOb()'
    ...
    ...
    sur toutes les fonctions


    Je dois rater quelque chose de simple mais que je ne vois pas, et que je n'ai trouvé dans aucun document ou tutoriel.
    Normal si c'est trivial et évident pour tout le monde ...

  2. #2
    Expert confirmé


    comment les utiliser dans un projet
    Dans le package QxEntityEditor, tu as un dossier ./samples/.
    Dans ce dossier, tu as un projet QxEE nommé qxBlog.qxee, et tu as aussi un exemple de projet de type exécutable nommé qxBlogExec.zip : ce projet exécutable est un exemple pour montrer comment utiliser les classes générées par QxEntityEditor ==> tu peux donc te baser sur ce projet pour démarrer.

    En regardant rapidement ton fichier projet BaseAgri.pro, il manque au moins :
    - l'inclusion de QxOrm.pri : include($$(QXORM_DIR)/QxOrm.pri)
    - les dépendances aux différentes bibliothèques, quelque chose comme ça :
    LIBS += -l"QxOrm"
    LIBS += -l"BaseAgrid"
    LIBS += -l"BaseAgriModeld"

    Bref prend exemple sur le projet qxBlogExec.zip.
    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
    Nouveau membre du Club
    Bonjour,
    Citation Envoyé par QxOrm Voir le message

    Dans le package QxEntityEditor, tu as un dossier ./samples/.
    Dans ce dossier, tu as un projet QxEE nommé qxBlog.qxee, et tu as aussi un exemple de projet de type exécutable nommé qxBlogExec.zip : ce projet exécutable est un exemple pour montrer comment utiliser les classes générées par QxEntityEditor ==> tu peux donc te baser sur ce projet pour démarrer.

    En regardant rapidement ton fichier projet BaseAgri.pro, il manque au moins :
    - l'inclusion de QxOrm.pri : include($$(QXORM_DIR)/QxOrm.pri)
    - les dépendances aux différentes bibliothèques, quelque chose comme ça :
    LIBS += -l"QxOrm"
    LIBS += -l"BaseAgrid"
    LIBS += -l"BaseAgriModeld"

    Bref prend exemple sur le projet qxBlogExec.zip.
    Oui. J'ai vu tout cela. Et c'est très simple (j'ai cru trop simple) car on a là:
    - trois répertoires Debug, Release, et Qt qui ne sont pas significatifs pour comprendre
    - un répertoire SRC qui contient un main.cpp qui donne envie d'utiliser, mais qui ne fourni rien pour
    arriver à compiler (c'est pas son rôle)
    - un répertoire Include qui contient:
    * precompiled.h (toujours égal à lui-même par rapport aux autres exposés)
    * export.h (toujours égal à lui-même, tellement même que j'ai cru qu'il ne concernait pas ma "quête" sur
    l'observation qu'il ne parle que de "QX_REGISTER_HPP_..." et "QX_REGISTER_CPP_..." alors que la
    génération utilise QX_REGISTER_COMPLEX_CLASS_NAME_HPP_... et QX_REGISTER_COMPLEX_CLASS_NAME_CPP_...)
    (je vais devoir considérer cette position, la mienne, comme absurde ...)
    - et un .pro, assez conforme à ce que j'ai l'habitude d'utiliser, avec des INCLUDEPATH que j'ai aussi, des libs
    que j'ai aussi habituellement QxOrmd, (par contre je ne comprends pas pourquoi BaseAgrid et BaseAgriModeld n'étaient
    pas dans le .pro posté, ils étaient dans des précédents -mais j'avais peut-être d'autres erreurs-)
    (Par contre je viens de voir qu'un "CONFIG += C++11" y traînait; une tentative désespérée en fin de course ...)

    Mais ce .pro contient deux points que j'ai raté:
    - include QxOrm.pri dont tu relèves l'absence dans le mien (merci; comment j'ai pu rater cela ?)
    - et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {
    PRECOMPILED_HEADER = ./include/precompiled.h
    } # !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER)

    dont je ne comprends pas toute la subtilité, mais j'ai cru ma version exposée partout conforme à cela.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    CONFIG += precompile_header
    PRECOMPILED_HEADER = precompiled.h


    Sur ces bases, j'ai:
    - relu tous mes codes (peu nombreux quand QxEE m'a mis tout en librairie),
    - inclus le QXOrm.pri
    - modifié le export.h dans lequel trainait un "_BUILDING_MY_CACHABANPER_EXE" (!!!!)
    (remplacé par _BUILDING_MY_BASEAGRI_EXE),
    - recompilé et (Ouf!) je parviens à un link correct et une exécution de l'application
    J'obtiens:
    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
     
    Démarrage de /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/BaseAgri...
    [QxOrm] qx::QxSqlDatabase : create new database connection in thread '0xb12f7740' with key '{3910458d-05d4-4bc9-83e5-9f15e2ac7ada}'
    [QxOrm] execute sql query failed : SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=1
    Unable to fetch row
    No query
    err: ParamUnites
    [QxOrm] execute sql query failed : SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=2
    Unable to fetch row
    No query
    err: ParamClasses
    [QxOrm] execute sql query failed : SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=3
    Unable to fetch row
    No query
    err: ParamStIntOb
    [QxOrm] execute sql query failed : SELECT oCulture.IdObj AS oCulture_IdObj_0, oCulture.Abrege AS oCulture_Abrege_0, oCulture.dtDebut AS oCulture_dtDebut_0, oCulture.dtFinPrevue AS oCulture_dtFinPrevue_0, oCulture.NbUeK_Rang AS oCulture_NbUeK_Rang_0, oCulture.Sem_Plant_Rang AS oCulture_Sem_Plant_Rang_0, oCulture.idUniteSem_Plant AS oCulture_idUniteSem_Plant_0, oCulture.Prod_Rang AS oCulture_Prod_Rang_0, oCulture.idUniteProd AS oCulture_idUniteProd_0, oCulture.Libelle AS oCulture_Libelle_0 FROM oCulture WHERE KType=1
    Unable to fetch row
    No query
    [CaCha]Chargement des listes - err: Schemas
    [QxOrm] execute sql query failed : SELECT oCulture.IdObj AS oCulture_IdObj_0, oCulture.Attr AS oCulture_Attr_0, oCulture.KType AS oCulture_KType_0, oCulture.Libelle AS oCulture_Libelle_0, oCulture.Abrege AS oCulture_Abrege_0, oCulture.dtDebut AS oCulture_dtDebut_0, oCulture.dtFinPrevue AS oCulture_dtFinPrevue_0, oCulture.NbUeK_Rang AS oCulture_NbUeK_Rang_0, oCulture.Sem_Plant_Rang AS oCulture_Sem_Plant_Rang_0, oCulture.Prod_Rang AS oCulture_Prod_Rang_0, oCulture.NoUeK AS oCulture_NoUeK_0, oCulture.NbRang AS oCulture_NbRang_0, oCulture.dtFinEffective AS oCulture_dtFinEffective_0, oCulture.idUniteSem_Plant AS oCulture_idUniteSem_Plant_0, oCulture.idUniteProd AS oCulture_idUniteProd_0, oCulture.IdSchema AS oCulture_IdSchema_0, oCulture.IdBP AS oCulture_IdBP_0 FROM oCulture WHERE KType=2
    Unable to fetch row
    No query
    [CaCha]Chargement des listes - err: Cultures
    [QxOrm] execute sql query failed : SELECT oStIntOb.IdObj AS oStIntOb_IdObj_0, oStIntOb.idType AS oStIntOb_idType_0, oStIntOb.idClasse AS oStIntOb_idClasse_0, oStIntOb.Abrege AS oStIntOb_Abrege_0, oStIntOb.dtDate_Delai AS oStIntOb_dtDate_Delai_0, oStIntOb.idUniteDate_Delai AS oStIntOb_idUniteDate_Delai_0, oStIntOb.dtDuree AS oStIntOb_dtDuree_0, oStIntOb.idUniteDuree AS oStIntOb_idUniteDuree_0, oStIntOb.Libelle AS oStIntOb_Libelle_0 FROM oStIntOb WHERE idCulture=1
    Unable to fetch row
    No query
    [CaCha]Chargement des listes - err: Stades de Culture
    /home/cs/Bureau/AteliersLogiciels/BaseAgri/build-BaseAgri-Desktop_Qt_5_3_GCC_32bit-Debug/BaseAgri s'est terminé avec le code 0

    On peut remarquer que les lectures ne se font pas; je vais travailler à cela.
    Mais sans toucher aux classes des enregistrements désormais.

    Il peut y avoir une piste; j'ai toujours ce que j'ai exposé dans mon message précédent:
    J'utilise la classe oParam dans "oparam.gen.h"; dans Qt Creator, lorsque j'accède à "oparam.gen.h"
    (par "Follow symbol under cursor" -donc le lien est connu-) sur le 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
     
    #ifndef _BASEAGRI_OPARAM_H_
    #define _BASEAGRI_OPARAM_H_
     
    class oStIntOb;
    class oCulture;
     
    class BASEAGRI_EXPORT oParam
    {
     
       QX_REGISTER_FRIEND_CLASS(oParam)
     
    public:
     
       typedef qx::QxCollection<long, boost::shared_ptr<oStIntOb> > type_list_of_oStIntOb;
    ...
    (en bas)
    QX_REGISTER_COMPLEX_CLASS_NAME_HPP_BASEAGRI(oParam, qx::trait::no_base_class_defined, 0, oParam)

    j'ai sur BASEAGRI_EXPORT un warning avec en popup "skip identifier BASEAGRI_EXPORT"
    et la ligne QX_REGISTER_FRIEND_CLASS(oParam) est soulignée en rouge (popup "expected a declaration")
    et de même la ligne QX_REGISTER_COMPLEX_CLASS_NAME_HPP_BASEAGRI (en rouge, même popup)
    Ceci fait probablement que les classes, connues du code C++ passent en compilation, mais ne sont pas enregistrées
    dans QX_REGISTER ...
    ... mais je ne vois pas la cause de cela.

    Je mets aussi deux des six "qxFetchByQuery" qui retournent "Unable to fetch row" et "No query",
    (un de l'objet "oParam" et un de l'objet "oCulture", des codes un peu différents)
    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
    // Les listes de paramètres à usage général par divers objets
    QString query="WHERE TypeParam=";
    QSqlError err;
    // Create a model and a mapper for oParam/Unites and fetch data from database
    modelUnites = new qx::QxModel<oParam>();
    err=modelUnites->qxFetchByQuery(query+QString::number(ParamType_Unites));      if(err.type()!=0){qDebug() << "err: ParamUnites";}
    ui->lstViewUnites->setModel(modelUnites); ui->lstViewUnites->setModelColumn(2);
    ui->lstViewUnites->show();
    mapperUnites = new QDataWidgetMapper;
    mapperUnites->setModel(modelUnites);
    mapperUnites->addMapping(ui->UniteAbrege,3);
    mapperUnites->addMapping(ui->UniteLibelle,2);    //mapperUnites->toFirst();
    ui->btSupprimerUnite->setEnabled(false);
    ui->btModifierUnite->setEnabled(false);
    ui->btCreerUnite->setEnabled(false);


    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
        // Le Volet "Schémas de culture"
    // Create a model for oCulture/Schemas and fetch data from database
    modelSchemas = new qx::QxModel<oCulture>();
    lstCol << "Abrege" << "dtDebut" << "dtFinPrevue" << "NbUeK_Rang" <<
              "Sem_Plant_Rang" << "idUniteSem_Plant" << "Prod_Rang" << "idUniteProd" << "Libelle";
    lstHdr << "Abrégé" << "Déb." << "Fin" << "nU" << "SemPl" << "Unité" << "Prod." << "Unité" << "Libellé";
    lrgCol << 60 << 40 << 40 << 30 << 50 << 50 << 50 << 50 << 80;
    for(int i=0; i<lstHdr.count(); i++) tmpHash.insert(lstCol[i],lstHdr[i]);
    modelSchemas->setListOfColumns(lstCol); modelSchemas->setListOfHeaders(tmpHash);
    err=modelSchemas->qxFetchByQuery(query+QString::number(KType_Schema));
    if(err.type()!=0){qDebug() << "[CaCha]Chargement des listes - err: Schemas";}
    ui->tableViewSchemas->setModel(modelSchemas);
    //ui->tableViewSchemas->horizontalHeader()->moveSection(from,to);
    // EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }
    // QSqlRelationalTableModel setEditStrategy(EditStrategy strategy)
    //modelSchemas->setEditStrategy();
    for(int i=0; i<lrgCol.count(); i++) ui->tableViewSchemas->setColumnWidth(i,lrgCol[i]);
    ui->tableViewSchemas->show();

  4. #4
    Expert confirmé
    (Ouf!) je parviens à un link correct et une exécution de l'application


    trois répertoires Debug, Release, et Qt qui ne sont pas significatifs pour comprendre
    • Debug : répertoire dédié au compilateur en mode debug ;
    • Release : répertoire dédié au compilateur en mode release ;
    • Qt : répertoire dédié aux objets spécifiques à Qt : moc, rcc, etc...


    C'est le fichier QxOrm.pri qui paramètre ces répertoires par défaut : rien ne t'empêche de surcharger les valeurs pour modifier ces paramètres si tu as l'habitude d'une autre arborescence.

    export.h (toujours égal à lui-même, tellement même que j'ai cru qu'il ne concernait pas ma "quête" sur l'observation qu'il ne parle que de "QX_REGISTER_HPP_..." et "QX_REGISTER_CPP_..." alors que la génération utilise QX_REGISTER_COMPLEX_CLASS_NAME_HPP_... et QX_REGISTER_COMPLEX_CLASS_NAME_CPP_...) (je vais devoir considérer cette position, la mienne, comme absurde ...)
    Tu as une explication dans la FAQ ici : http://www.qxorm.com/qxorm_fr/faq.html#faq_150

    !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {
    PRECOMPILED_HEADER = ./include/precompiled.h
    } # !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER)
    Les versions récentes de MinGW ont un problème avec les entêtes pré-compilés de taille conséquente (plus d'informations ici : http://www.developpez.net/forums/d14...-sous-windows/).
    L'option _QX_NO_PRECOMPILED_HEADER est donc utile uniquement pour MinGW > 4.7.

    j'ai sur BASEAGRI_EXPORT un warning avec en popup "skip identifier BASEAGRI_EXPORT" et la ligne QX_REGISTER_FRIEND_CLASS(oParam) est soulignée en rouge (popup "expected a declaration")
    et de même la ligne QX_REGISTER_COMPLEX_CLASS_NAME_HPP_BASEAGRI (en rouge, même popup) Ceci fait probablement que les classes, connues du code C++ passent en compilation, mais ne sont pas nregistrées dans QX_REGISTER ... ... mais je ne vois pas la cause de cela.
    Je pense que c'est lié à un paramétrage de Qt Creator (il doit manquer des path définis dans Qt Creator).
    Rien de grave puisque tu compiles et link sans erreur.

    Je mets aussi deux des six "qxFetchByQuery" qui retournent "Unable to fetch row" et "No query"
    As-tu essayé d'exécuter les requêtes (qu'on voit dans tes traces) avec un outil dédié à ton SGBD (par exemple SQLite Manager pour un SGBD SQLite) ?
    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
    Nouveau membre du Club
    Citation Envoyé par QxOrm Voir le message


    As-tu essayé d'exécuter les requêtes (qu'on voit dans tes traces) avec un outil dédié à ton SGBD (par exemple SQLite Manager pour un SGBD SQLite) ?
    Que ce soit l'interrogation "naturelle", comme je la pense :
    SELECT IdObj, TypeParam, Libelle, Abrege FROM oParam WHERE TypeParam=2
    ou la forme qu'utilise QxOrm :
    SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=2
    ou une forme intermédiaire :
    SELECT oParam.IdObj, oParam.TypeParam, oParam.Libelle, oParam.Abrege FROM oParam WHERE TypeParam=2
    j'obtiens toujours le même résultat des cinq lignes concernées (sur une cinquantaine)

    Mais ce n'est pas avec SqLite Manager, car (si j'ai bien compris) il fonctionne avec Firefox et j'utilise Chrome.
    C'est donc avec SQLiteBrowser.
    Mais je vais installer SqLite Manager et voir.

    SqLite Manager donne exactement le même résultat (correct) sur toute table et toute forme d'interrogation.

    J'ai une autre information, sur la trace dans Qt Creator;
    dans le code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Les listes de paramètres à usage général par divers objets
        QString query="WHERE TypeParam=";
        QSqlError err;
        // Create a model and a mapper for oParam/Unites and fetch data from database
        modelUnites = new qx::QxModel<oParam>();
        query=query + QString::number(ParamType_Unites);
        err=modelUnites->qxFetchByQuery(query);
        if(err.type()!=0){qDebug() << "err: ParamUnites";}
        //err=modelUnites->qxFetchByQuery(query+QString::number(ParamType_Unites));      if(err.type()!=0){qDebug() << "err: ParamUnites";}
        ui->lstViewUnites->setModel(modelUnites); ui->lstViewUnites->setModelColumn(2);
        ui->lstViewUnites->show();

    on arrive à "err=modelUnites->qxFetchByQuery(query+QString::number(ParamType_Unites));"
    avec query ="WHERE TypeParam="
    et dans modelUnites, dans m_tstDataMember, les 4 champs attendus;
    je ne peux pas entrer dans qxFetchByQuery et je ne peux que récupérer le retour;
    (d'ailleurs est-ce que ce ne serait pas une indication de mauvais paramétrage des dépendances ?)
    Pour la trace de CaChaBanPer ("relations à la main") on a :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Début du débogage
    &"warning: GDB: Failed to set controlling terminal: Ioctl() inappropri\303\251 pour un p\303\251riph\303\251rique\n"
    [QxOrm] qx::QxSqlDatabase : create new database connection in thread '0xb1ee1740' with key '{7b056d2c-e634-4230-8879-bfc7ebcc47dc}'
    can't find linker symbol for virtual table for `qx::IxModel' value
      found `typeinfo for BureauDelegate' instead
    can't find linker symbol for virtual table for `qx::IxModel' value
      found `typeinfo for BureauDelegate' instead
    can't find linker symbol for virtual table for `qx::IxModel' value
      found `typeinfo for BureauDelegate' instead
    [QxOrm] sql query (4 ms) : SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=1

    et pas d'erreur.
    Ici (BaseAgri sur la génération de QxEE), on a
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Début du débogage
    &"warning: GDB: Failed to set controlling terminal: Ioctl() inappropri\303\251 pour un p\303\251riph\303\251rique\n"
    [QxOrm] qx::QxSqlDatabase : create new database connection in thread '0xb1b08740' with key '{679e561a-4086-4030-b176-0d3682e58bf0}'
    [QxOrm] execute sql query failed : SELECT oParam.IdObj AS oParam_IdObj_0, oParam.TypeParam AS oParam_TypeParam_0, oParam.Libelle AS oParam_Libelle_0, oParam.Abrege AS oParam_Abrege_0 FROM oParam WHERE TypeParam=1
    Unable to fetch row
    No query


    J'ai l'impression d'une incompatibilité entre mon BaseAgri.pro et QxOrm.pri car, lorsque:
    - je rajoute dans les headers "QxBase/include/BaseAgri_all_include.gen.h" et ../Libs/QxOrm/include/QxRegister/QxRegister.h"
    - je mets dans l'éditeur tous ces fichiers (codes),
    selon le sens dans lequel je tourne d'un code à l'autre, j'ai ou je n'ai pas les indications d'erreur ou warning
    dont j'ai déjà parlé (sur oparam.gen.h, Qx_register souligné en rouge, ...)

    Pourtant je ne détecte pas ce qui peut être incompatible dans BaseAgri.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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    include($$PWD/../Libs/QxOrm/QxOrm.pri)
     
    QT       += core gui sql
     
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     
    TARGET = BaseAgri
    TEMPLATE = app
    #CONFIG += C++11
    CONFIG += precompile_header
    PRECOMPILED_HEADER = precompiled.h
     
    SOURCES += main.cpp\
        mainwindow.cpp \
        taccesdao.cpp \
        bureaudelegate.cpp
     
    HEADERS  += \
        mainwindow.h \
        taccesdao.h \
        bureaudelegate.h \
        QxBase/include/BaseAgri_all_include.gen.h \
        ../Libs/QxOrm/include/QxRegister/QxRegister.h
     
    FORMS    += \
        mainwindow.ui
     
    #LIBS += -L/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/lib -lQxOrmd -lboost_serialization
    LIBS += -lboost_serialization
     
    LIBS += -L$$PWD/../Libs/QxOrm/lib/ -lQxOrmd
    LIBS += -L$$PWD/QxBase/bin/  -lBaseAgrid
    LIBS += -L$$PWD/QxModel/bin/ -lBaseAgriModeld
     
    INCLUDEPATH += $$PWD/../Libs/QxOrm/include
    #DEPENDPATH += $$PWD/../Libs/QxOrm/include
     
    INCLUDEPATH += $$PWD/QxBase/include
    #DEPENDPATH += $$PWD/QxBase/include
     
    INCLUDEPATH += $$PWD/QxModel/include
    #DEPENDPATH += $$PWD/QxModel/include
     
    #INCLUDEPATH += ./../Libs/QxOrm/include/
     
    OTHER_FILES += \
        Erreurs.txt \
        Messages.txt

    et QxOrm.pri:
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    ############################
    # Qt GUI module dependency #
    ############################
     
    # To remove QtGui dependency, uncomment the following line :
    # CONFIG += QX_NO_QT_GUI
     
    CONFIG(QX_NO_QT_GUI) { QT -= gui }
    else {
    DEFINES += _QX_QT_GUI_DEPENDENCY
    greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets }
    } # CONFIG(QX_NO_QT_GUI)
     
    ###############################
    # boost Library Configuration #
    ###############################
     
    # In this section, it's necessary to specify boost directories (lib + include) and boost serialization module name (debug + release) :
    #  - QX_BOOST_INCLUDE_PATH : your boost include path
    #  - QX_BOOST_LIB_PATH : your boost lib path
    #  - QX_BOOST_LIB_SERIALIZATION_DEBUG : your boost serialization module name in debug mode
    #  - QX_BOOST_LIB_SERIALIZATION_RELEASE : your boost serialization module name in release mode
    #  - QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG : your boost wide serialization module name in debug mode (default is empty)
    #  - QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE : your boost wide serialization module name in release mode (default is empty)
     
    isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote($$(BOOST_INCLUDE)) }
    isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote($$(BOOST_LIB)) }
    isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "$$(BOOST_LIB_SERIALIZATION_DEBUG)" }
    isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "$$(BOOST_LIB_SERIALIZATION_RELEASE)" }
    # isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
    # isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }
     
    ##############################
    # QxOrm Library Static Build #
    ##############################
     
    # To create only 1 EXE including Qt, boost serialization and QxOrm libraries without any dependency :
    #   1- be sure to build Qt and boost::serialization using static mode
    #   2- in "./QxOrm.pri" file, add the following line : "DEFINES += _QX_STATIC_BUILD"
    #   3- BUT PLEASE : in your program, add a "readme.txt" file and a "about my program..." window to indicate that your application is based on Qt, boost and QxOrm libraries !
    # Note : on Windows, static mode works with only 1 EXE, it will never work mixing DLL and EXE (because of singleton implementation of boost::serialization and QxOrm libraries)
     
    # DEFINES += _QX_STATIC_BUILD
     
    ######################################
    # QxOrm Library Serialization Engine #
    ######################################
     
    # In this section, you can enable/disable different serialization engine, by default, there is :
    #  - _QX_SERIALIZE_BINARY_ENABLED
    #  - _QX_SERIALIZE_XML_ENABLED
     
    DEFINES += _QX_SERIALIZE_BINARY_ENABLED
    DEFINES += _QX_SERIALIZE_XML_ENABLED
     
    # DEFINES += _QX_SERIALIZE_POLYMORPHIC_ENABLED
    # DEFINES += _QX_SERIALIZE_TEXT_ENABLED
    # DEFINES += _QX_SERIALIZE_PORTABLE_BINARY_ENABLED
    # DEFINES += _QX_SERIALIZE_WIDE_BINARY_ENABLED
    # DEFINES += _QX_SERIALIZE_WIDE_TEXT_ENABLED
    # DEFINES += _QX_SERIALIZE_WIDE_XML_ENABLED
     
    ######################
    # Globals Parameters #
    ######################
     
    CONFIG += debug_and_release
    CONFIG += precompile_header
    DEPENDPATH += .
    INCLUDEPATH += ./include
    INCLUDEPATH += $${QX_BOOST_INCLUDE_PATH}
    QT += network
    QT += xml
    QT += sql
    MOC_DIR = ./qt/moc
    RCC_DIR = ./qt/rcc/src
    UI_DIR = ./qt/ui
    UI_HEADERS_DIR = ./qt/ui/include
    UI_SOURCES_DIR = ./qt/ui/src
     
    CONFIG(debug, debug|release) {
    DEFINES += _QX_MODE_DEBUG
    } else {
    DEFINES += _QX_MODE_RELEASE
    } # CONFIG(debug, debug|release)
     
    #############################
    # Compiler / Linker Options #
    #############################
     
    win32 {
    CONFIG(debug, debug|release) {
    } else {
    DEFINES += NDEBUG
    win32-msvc2005: QMAKE_LFLAGS += /OPT:NOREF
    win32-msvc2008: QMAKE_LFLAGS += /OPT:NOREF
    win32-msvc2010: QMAKE_LFLAGS += /OPT:NOREF
    } # CONFIG(debug, debug|release)
    win32-g++: QMAKE_LFLAGS += -Wl,-export-all-symbols -Wl,-enable-auto-import
    } # win32
     
    #######################
    # Externals Libraries #
    #######################
     
    LIBS += -L$${QX_BOOST_LIB_PATH}
     
    CONFIG(debug, debug|release) {
    LIBS += -l$${QX_BOOST_LIB_SERIALIZATION_DEBUG}
    !isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { LIBS += -l$${QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG} }
    } else {
    LIBS += -l$${QX_BOOST_LIB_SERIALIZATION_RELEASE}
    !isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { LIBS += -l$${QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE} }
    } # CONFIG(debug, debug|release)

    ... sauf que bien des choses sont définies plusieurs fois (je suppose que ce sont des "sécurités" de QXOrm.pri) ...

  6. #6
    Expert confirmé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Unable to fetch row    ....    No query

    C'est le driver QSQLite de Qt qui remonte cette erreur : c'est un peu le problème avec ce driver, l'erreur n'est pas très explicite.
    Une recherche sur Google montre plusieurs cas avec cette erreur.
    On dirait que c'est la connexion à la BDD qui pose problème, mais je ne sais pas pourquoi.
    Comment initialises-tu tes paramètres de connexion ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    can't find linker symbol for virtual table for `qx::IxModel' value
    found `typeinfo for BureauDelegate' instead

    Je n'ai jamais vu ce type de message, à mon avis c'est un problème, il faudrait que tu creuses pour savoir pourquoi tu as ça.

    Concernant ton fichier BaseAgri.pro :
    - tu ne gères pas mode debug et release : attention à ça.
    - la ligne "LIBS += -lboost_serialization" est fausse et même dangereuse car pour le moment tu sembles travailler en mode debug, et là tu utilises un composant en mode release : c'est géré par QxOrm.pri donc efface cette ligne.
    - supprime également "../Libs/QxOrm/include/QxRegister/QxRegister.h" ==> ça n'a rien à faire dans ton projet !
    - supprime également : QxBase/include/BaseAgri_all_include.gen.h ==> tu peux l'inclure dans un .cpp ou dans le precompiled.h, mais ça n'a rien à faire dans le .pro.

    ... sauf que bien des choses sont définies plusieurs fois (je suppose que ce sont des "sécurités" de QXOrm.pri) ...
    Non, il y a des conditions pour gérer toutes les environnements Windows, Linux et MacOSX.
    Mais je ne pense pas qu'il y a des paramètres définis plusieurs fois.

    je ne peux pas entrer dans qxFetchByQuery et je ne peux que récupérer le retour
    Dans Qt Creator, il faut ajouter tous les projets : QxOrm, les projets générés par QxEntityEditor et ton projet.
    Normalement avec tout ça, si tout est bien linké l'un à l'autre, tu devrais pouvoir rentrer dans les fonctions en mode debug.
    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.

  7. #7
    Nouveau membre du Club
    Citation Envoyé par QxOrm Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Unable to fetch row    ....    No query

    C'est le driver QSQLite de Qt qui remonte cette erreur : c'est un peu le problème avec ce driver, l'erreur n'est pas très explicite.
    Une recherche sur Google montre plusieurs cas avec cette erreur.
    On dirait que c'est la connexion à la BDD qui pose problème, mais je ne sais pas pourquoi.
    Comment initialises-tu tes paramètres de connexion ?
    C'est un des rares lambeaux qui reste de ma librairie "avant QxOrm", j'ai tout retrouvé dans QxOrm;
    (pas de quoi garder cette librairie d'ailleurs; mais bon je nettoierai après; il est en chantier sur les erreurs ...)
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #ifndef TACCESDAO_H
    #define TACCESDAO_H
     
    #include <QSqlDatabase>
    #include <qsqlerror.h>
    #include "oParam.gen.h"
    #include "oCulture.gen.h"
    #include "oStIntOb.gen.h"
     
    // Pour oParam
    const int ParamType_Unites       =1;
    const int ParamType_Classes      =2; // Préparations, Semis/Plantations, Végétation, Récoltes, ...
    const int ParamType_StIntOb      =3; // Stades-St, Interventions-Int, Observations-Ob
     
    // Pour oCulture
    const int KType_Schema         =1;
    const int KType_Culture        =2;
    const int KType_Stat_Culture   =3;
     
    class TAccesDao
    {
    protected:
        QString DaoDriver;
        QString DaoDBFile;
        QString Host;
        QString User;
        QString Password;
        QSqlDatabase DaoDB;
        QSqlError err;
    public:
        TAccesDao(QString aDaoDriver="QSQLITE", QString aDaoDBFile="BaseAgri.apt",
                  QString aHost="localhost", QString aUser="root", QString aPassword="")
            : DaoDriver(aDaoDriver), DaoDBFile(aDaoDBFile), Host(aHost), User(aUser), Password(aPassword)
        {// Initialiser un acces Dao à une base de données (par défaut "BaseAgri.apt")
        open();
        if(err.type() != 0)
          {// rapporter l'erreur
          //err.type
          }
        DaoDB = qx::QxSqlDatabase::getDatabase();
        if(!DaoDB.isValid())
          {// rapporter l'erreur
          //err.type
          }
        }
     
        void open()
        {
        qx::QxSqlDatabase::getSingleton()->setDriverName(DaoDriver);
        qx::QxSqlDatabase::getSingleton()->setDatabaseName(DaoDBFile);
        qx::QxSqlDatabase::getSingleton()->setHostName(Host);
        qx::QxSqlDatabase::getSingleton()->setUserName(User);
        qx::QxSqlDatabase::getSingleton()->setPassword(Password);
        }
     
        void close(){;}
     
        void CreerTableParam()
        {
        err = qx::dao::create_table<oParam>();
        }
     
        void CreerTableCulture()
        {
        err = qx::dao::create_table<oCulture>();
        }
     
        void CreerTableStades()
        {
        err = qx::dao::create_table<oStIntOb>();
        }
    };
     
    #endif // TACCESDAO_H



    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    can't find linker symbol for virtual table for `qx::IxModel' value
    found `typeinfo for BureauDelegate' instead

    Je n'ai jamais vu ce type de message, à mon avis c'est un problème, il faudrait que tu creuses pour savoir pourquoi tu as ça.
    Mais cela est dans "CaChaBanPer", l'autre projet qui fonctionne ("relations à la main") pour comparer.
    Il lit très bien (en 4ms, si mon souvenir est bon, et pas d'erreur Sql ...)
    Pour delegate, mon "Delegate" est "en chantier" sur ce projet, cela doit expliquer; mais fetchByQuery y fonctionne très bien.


    Concernant ton fichier BaseAgri.pro :
    - tu ne gères pas mode debug et release : attention à ça.
    Bien vu. Je l'ai tellement trafiqué, ce .pro, que je ne sais plus ce qu'il y a dedans; un retour au calme donne:
    (avec toutefois ici la supression de la ligne que j'ai habituellement sur Boost; voir plus bas ...)
    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
     
    #-------------------------------------------------
    #
    # Project created by QtCreator 2015-06-29T21:41:59
    #
    #-------------------------------------------------
    include($$PWD/../Libs/QxOrm/QxOrm.pri)
     
    QT       += core gui sql
     
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
     
    TARGET = BaseAgri
    TEMPLATE = app
    CONFIG += debug
    CONFIG += precompile_header
    PRECOMPILED_HEADER = precompiled.h
     
    SOURCES += main.cpp\
        mainwindow.cpp \
        taccesdao.cpp
     
    HEADERS  += \
        mainwindow.h \
        taccesdao.h
     
    FORMS    += \
        mainwindow.ui
     
    LIBS += -L$$PWD/../Libs/QxOrm/lib/ -lQxOrmd
    LIBS += -L$$PWD/QxBase/bin/  -lBaseAgrid
    LIBS += -L$$PWD/QxModel/bin/ -lBaseAgriModeld
     
    INCLUDEPATH += $$PWD/../Libs/QxOrm/include
    DEPENDPATH += $$PWD/../Libs/QxOrm/include
     
    INCLUDEPATH += $$PWD/QxBase/include
    DEPENDPATH += $$PWD/QxBase/include
     
    INCLUDEPATH += $$PWD/QxModel/include
    DEPENDPATH += $$PWD/QxModel/include
     
     
    OTHER_FILES += \
        Erreurs.txt \
        Messages.txt



    - la ligne "LIBS += -lboost_serialization" est fausse et même dangereuse car pour le moment tu sembles travailler en mode debug, et là tu utilises un composant en mode release : c'est géré par QxOrm.pri donc efface cette ligne.
    Ok; mais si je ne mets pas cette ligne, compilation correcte jusqu'au bout, puis au link "patatras":
    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
     
    ...
    gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtXml -I../../../../Qt/5.3/gcc/include/QtNetwork -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -Iqt/moc -Iqt/ui -I. -o debug/taccesdao.o ../taccesdao.cpp
    /home/cs/Qt/5.3/gcc/bin/moc -D_QX_QT_GUI_DEPENDENCY -D_QX_SERIALIZE_BINARY_ENABLED -D_QX_SERIALIZE_XML_ENABLED -D_QX_MODE_DEBUG -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/home/cs/Qt/5.3/gcc/mkspecs/linux-g++ -I/home/cs/Bureau/AteliersLogiciels/BaseAgri -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/include -I/home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxBase/include -I/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxModel/include -I/home/cs/Qt/5.3/gcc/include -I/home/cs/Qt/5.3/gcc/include/QtWidgets -I/home/cs/Qt/5.3/gcc/include/QtSql -I/home/cs/Qt/5.3/gcc/include/QtXml -I/home/cs/Qt/5.3/gcc/include/QtNetwork -I/home/cs/Qt/5.3/gcc/include/QtGui -I/home/cs/Qt/5.3/gcc/include/QtCore -I. ../mainwindow.h -o qt/moc/moc_mainwindow.cpp
    g++ -c -include debug/BaseAgri -pipe -g -Wall -W -D_REENTRANT -fPIE -D_QX_QT_GUI_DEPENDENCY -D_QX_SERIALIZE_BINARY_ENABLED -D_QX_SERIALIZE_XML_ENABLED -D_QX_MODE_DEBUG -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt/5.3/gcc/mkspecs/linux-g++ -I../../BaseAgri -I./include -I../../Libs/QxOrm/include -I../QxBase/include -I../QxModel/include -I../../../../Qt/5.3/gcc/include -I../../../../Qt/5.3/gcc/include/QtWidgets -I../../../../Qt/5.3/gcc/include/QtSql -I../../../../Qt/5.3/gcc/include/QtXml -I../../../../Qt/5.3/gcc/include/QtNetwork -I../../../../Qt/5.3/gcc/include/QtGui -I../../../../Qt/5.3/gcc/include/QtCore -Iqt/moc -Iqt/ui -I. -o debug/moc_mainwindow.o qt/moc/moc_mainwindow.cpp
    g++ -Wl,-rpath,/home/cs/Qt/5.3/gcc -Wl,-rpath,/home/cs/Qt/5.3/gcc/lib -o BaseAgri debug/main.o debug/mainwindow.o debug/taccesdao.o debug/moc_mainwindow.o   -L -l -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/../Libs/QxOrm/lib/ -lQxOrmd -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxBase/bin/ -lBaseAgrid -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxModel/bin/ -lBaseAgriModeld -L/home/cs/Qt/5.3/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Xml -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread
    debug/main.o: In function `boost::archive::archive_exception::archive_exception(boost::archive::archive_exception const&)':
    /usr/include/boost/archive/archive_exception.hpp:43: undefined reference to `vtable for boost::archive::archive_exception'
    /usr/include/boost/archive/archive_exception.hpp:43: undefined reference to `vtable for boost::archive::archive_exception'
    debug/main.o: In function `void boost::serialization::throw_exception<boost::archive::archive_exception>(boost::archive::archive_exception const&)':
    /usr/include/boost/serialization/throw_exception.hpp:36: undefined reference to `boost::archive::archive_exception::~archive_exception()'
    /usr/include/boost/serialization/throw_exception.hpp:36: undefined reference to `typeinfo for boost::archive::archive_exception'
    debug/main.o: In function `void boost::archive::basic_xml_oarchive<boost::archive:<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />ml_oarchive>::save_override<qx::QxInvalidValue const>(boost::serialization::nvp<qx::QxInvalidValue const> const&, int)':
    /usr/include/boost/archive/basic_xml_oarchive.hpp:106: undefined reference to `boost::archive::basic_xml_oarchive<boost::archive:<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />ml_oarchive>::save_start(char const*)'
    /usr/include/boost/archive/basic_xml_oarchive.hpp:108: undefined reference to `boost::archive::basic_xml_oarchive<boost::archive:<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />ml_oarchive>::save_end(char const*)'
    ...



    - supprime également "../Libs/QxOrm/include/QxRegister/QxRegister.h" ==> ça n'a rien à faire dans ton projet !
    - supprime également : QxBase/include/BaseAgri_all_include.gen.h ==> tu peux l'inclure dans un .cpp ou dans le precompiled.h, mais ça n'a rien à faire dans le .pro.
    Oui, c'est sûr, ces deux lignes n'étaient là que dans le cadre de la tentative d'explication des messages d'erreur,
    pour voir ce que cela changeait dans l'affichage de Qt Creator (comme j'expliquais sur QXREGISTER); ils n'y sont pas habituellement.
    Mais laissons tomber ce défaut d'affichage qui m'inquiétais (qui m'inquiète toujours, il est toujours là).


    Non, il y a des conditions pour gérer toutes les environnements Windows, Linux et MacOSX.
    Mais je ne pense pas qu'il y a des paramètres définis plusieurs fois.
    Il y a au moins "Qt += widgets" (je l'ai systématiquement dans tous les projets créés par Qt -que je ne connais que depuis 5.3-)


    Dans Qt Creator, il faut ajouter tous les projets : QxOrm, les projets générés par QxEntityEditor et ton projet.
    Normalement avec tout ça, si tout est bien linké l'un à l'autre, tu devrais pouvoir rentrer dans les fonctions en mode debug.
    Ok. Je vois cela.

  8. #8
    Expert confirmé
    mais si je ne mets pas cette ligne, compilation correcte jusqu'au bout, puis au link "patatras"
    .......
    g++ -Wl,-rpath,/home/cs/Qt/5.3/gcc -Wl,-rpath,/home/cs/Qt/5.3/gcc/lib -o BaseAgri debug/main.o debug/mainwindow.o debug/taccesdao.o debug/moc_mainwindow.o -L -l -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/../Libs/QxOrm/lib/ -lQxOrmd -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxBase/bin/ -lBaseAgrid -L/home/cs/Bureau/AteliersLogiciels/BaseAgri/QxModel/bin/ -lBaseAgriModeld -L/home/cs/Qt/5.3/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Xml -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread
    Plusieurs choses bizarres sur cette commande de link :
    • il manque boost, d'où ton erreur de link ==> dans QxOrm.pri, as-tu paramétré correctement les paramètres QX_BOOST_XXXX comme expliqué dans le tutoriel ici : http://marty-lionel.developpez.com/t...s-windows/#LVI (remarque : tu peux également créer des variables d'environnement si tu ne veux pas modifier QxOrm.pri, c'est même plus propre avec des variables d'environnement) ;
    • "-lQt5Widgets -lQt5Sql -lQt5Xml -lQt5Network -lQt5Gui -lQt5Core" : c'est bizarre qu'il n'aille pas chercher les versions debug de ces bibliothèques (avec un "d" en suffixe).
    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.

  9. #9
    Nouveau membre du Club
    Citation Envoyé par QxOrm Voir le message
    Plusieurs choses bizarres sur cette commande de link :
    • il manque boost, d'où ton erreur de link ==> dans QxOrm.pri, as-tu paramétré correctement les paramètres QX_BOOST_XXXX comme expliqué dans le tutoriel ici : http://marty-lionel.developpez.com/t...s-windows/#LVI (remarque : tu peux également créer des variables d'environnement si tu ne veux pas modifier QxOrm.pri, c'est même plus propre avec des variables d'environnement) ;
    Mais, je n'ai jamais touché à QxOrm.pri !!!!
    La compilation de la libairie c'est faite automatiquement, probablement sur la présence dans le système,
    et disponible dans Qt de libboost_serialization.so.1.55.0 dans usr/lib/i386-linux-gnu
    La première question à se poser est donc probablement: Est-ce que ma librairie QxOrm,
    libQxOrmd.so.1.3.2 dans /home/cs/Bureau/AteliersLogiciels/Libs/QxOrm/build-QxOrm-Desktop_Qt_5_3_GCC_32bit-Debug/lib
    est valide ?

    Est-ce que ce n'est pas cela qui fait que je ne peux pas "tracer" dedans ? (Je ne peux toujours pas après tes indications.)

    La question suivante sera, pour moi, comment installer un "boost-dev" ou quelque chose comme cela ?
    Tout ce qui concerne libboost_serialization sur ma machine est ici:
    /usr/lib/i386-linux-gnu/libboost_serialization.a
    /usr/lib/i386-linux-gnu/libboost_serialization.so
    /usr/lib/i386-linux-gnu/libboost_serialization.so.1.55.0
    /home/cs/Bureau/AteliersLogiciels/Libs/QxEntityEditor_Linux_32b/app/lib/libboost_serialization-mt.so
    /home/cs/Bureau/AteliersLogiciels/Libs/QxEntityEditor_Linux_32b/app/lib/libboost_serialization-mt.so.1.38.0
    Rajout1. J'ai aussi trouvé des "libboost-serialization":
    /usr/share/lintian/overrides/libboost-serialization1.55.0
    /var/lib/dpkg/info/libboost-serialization1.55.0:i386.list
    /var/lib/dpkg/info/libboost-serialization1.55.0:i386.md5sums
    /var/lib/dpkg/info/libboost-serialization1.55.0:i386.postinst
    /var/lib/dpkg/info/libboost-serialization1.55.0:i386.postrm
    /var/lib/dpkg/info/libboost-serialization1.55.0:i386.shlibs
    /var/lib/dpkg/info/libboost-serialization1.55-dev:i386.list
    /var/lib/dpkg/info/libboost-serialization1.55-dev:i386.md5sums
    /var/lib/dpkg/info/libboost-serialization-dev:i386.list
    /var/lib/dpkg/info/libboost-serialization-dev:i386.md5sums
    Rajout2. apt-get me dis que je devrais être content, j'ai déjà la dernière version de libboost-dbg !!
    (mais je ne sais pas où)


    • "-lQt5Widgets -lQt5Sql -lQt5Xml -lQt5Network -lQt5Gui -lQt5Core" : c'est bizarre qu'il n'aille pas chercher les versions debug de ces bibliothèques (avec un "d" en suffixe).
    Donner la liste des variables d'environnement, c'est plutôt ce que j'avais en tête, c'est plus clair (et c'est ce dont
    j'ai l'habitude dans d'autres environnements), sauf que je ne partais pas pour spécifier "5".
    Je n'ai rien contre le fait que QxOrm.pri en fasse une partie, mais il faut alors que je sache clairement qui fait quoi.
    Que faudrait-il pour que je définisse tout dans mon .pro ?

    A ce moment là, pour être "propre" (comme tu dis, et comme j'aime) il faut écrire un .pro qui précise bien les environnements
    en debug et en release ... mais il faut que j'ai un "boost-debug" (ou "boost-dev")
    Je cherche si cela existe (car, apparemment, dans la liste que je donne plus haut, je ne l'ai pas, et je ne peux donc même pas
    répondre à la toute première question du remplissage du QxOrm.pri -que je n'avais pas assez lu; mais bon j'ai vu la compil
    se passer sans avoir rien à faire ... j'ai cru au miracle ... c'est jamais bon-)

  10. #10
    Expert confirmé
    Le fait que tu montres toutes ces bibliothèques boost sans savoir laquelle utiliser + ne pas savoir pourquoi tu n'as pas les versions debug des bibliothèques Qt + parler de magie ==> j'ai l'impression que tu ne maitrises pas ton environnement de développement, et ça ce n'est pas bon pour le développement de ton application, mais également par la suite pour le déploiement de ton application (tu ne sauras pas quelles bibliothèques inclure dans ton futur package).

    Bref, je pense qu'il faudrait que tu reprennes à zéro pour installer un environnement de développement que tu maitrises.
    Je sais que le tutoriel d'installation a été écrit pour Windows, mais les étapes à suivre sont les mêmes pour un environnement Linux ou MacOSX : je te conseille donc de suivre le tutoriel étape par étape et d'adapter ça à Linux :
    1. prendre la décision suivante : est-ce que je souhaite avoir un environnement de dvp en 32bits ou en 64bits ;
    2. installer proprement Qt : facile, tu vas sur le site http://www.qt.io, tu télécharges la dernière version de Qt et tu l'installes !
    3. installer proprement boost : tu télécharges la dernière version de boost, puis tu compiles toi-même : les lignes de commandes pour compiler du tutoriel fonctionnent sous Linux (BJAM est multi-plaforme), change juste msvc par gcc ;
    4. installer proprement QxOrm ;
    5. tester tous les projets de test du package QxOrm (idéalement en mode debug et release).


    Après tout ça, tu auras un dossier Qt, un dossier boost et un dossier QxOrm comme il faut : quelque chose que tu maitrises pour ton développement, mais également par la suite pour le déploiement de ton application.

    Je n'ai rien contre le fait que QxOrm.pri en fasse une partie, mais il faut alors que je sache clairement qui fait quoi.
    Toutes les sections du fichier QxOrm.pri sont documentées : si y a des choses que tu ne comprends pas dans le fichier, tu peux toujours poser des questions.
    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.

  11. #11
    Nouveau membre du Club
    Citation Envoyé par QxOrm Voir le message
    Le fait que tu montres toutes ces bibliothèques boost sans savoir laquelle utiliser
    Mais non, il n'y en a que deux:
    - celle installée dans "/usr/lib/i386-linux-gnu/" (disons système, celle de l'environnement que je dois utiliser)
    - celle dans QxEntityeditor, je suppose pour ses besoins propres et que je n'utilise pas ...
    + ne pas savoir pourquoi tu n'as pas les versions debug des bibliothèques Qt
    Non, pas Qt, "boost" seulement (on peut même ne parler que de "boost_serialization" et "boost-wserialization" si on veut)
    + parler de magie
    Oui ... même entre les zéros et les uns, on peut caser humour et dérision

    ==> j'ai l'impression que tu ne maitrises pas ton environnement de développement,
    Voilà, je manque de culture sur linux et Qt, par rapport à d'autres environnements avec lesquels j'avais l'habitude de travailler:
    - Visual et le C++ pour les moteurs d'application et les bases de données pour servir les frontaux à travers COM
    - RadStudio XE et le Pascal pour les frontaux et l'interaction utilisateur.
    Mais on peut se remettre en cause, même à mon age; je comptais peut-être un peu sur la communauté pour ce changement de culture.

    et ça ce n'est pas bon pour le développement de ton application, mais également par la suite pour le déploiement de ton application
    (tu ne sauras pas quelles bibliothèques inclure dans ton futur package).
    Pour l'instant je ne travaille que pour moi (et peut-être deux trois copains). D'ici que je "distribue" ... les bibliothèques seront maîtrisées.

    Bref, je pense qu'il faudrait que tu reprennes à zéro pour installer un environnement de développement que tu maitrises.
    Je sais que le tutoriel d'installation a été écrit pour Windows,
    C'est peut-être ce qui m'a découragé d'approfondir certains passage, mais pour l'essentiel ...
    Mais ok; je reprends ce tutoriel pour la nième fois ...

    mais les étapes à suivre sont les mêmes pour un environnement Linux ou MacOSX : je te conseille donc de suivre le tutoriel étape par étape et d'adapter ça à Linux :
    1. prendre la décision suivante : est-ce que je souhaite avoir un environnement de dvp en 32bits ou en 64bits ;
    C'est fait avant QxOrm: 32 bits.
    • installer proprement Qt : facile, tu vas sur le site http://www.qt.io, tu télécharges la dernière version de Qt et tu l'installes !
    Ok, mon Qt 5.3 fonctionne très bien (même avec QxOrm tant que je ne prends pas la génération de QxEE)
    (sauf que l'éditeur "plante" parfois, on arrête et c'est reparti)
    Ah voilà un point déterminant; tu conseille d'utiliser ma propre compilation plutôt que la distribution Ubuntu installée par apt-get ?
    C'est bien cela ?
    • installer proprement QxOrm ;
    C'est fait; peut-être trop facilement pour que je comprenne tout ... mais j'essai de m'améliorer ;-)
    • tester tous les projets de test du package QxOrm (idéalement en mode debug et release).
    Oui, je n'ai eu comme premier objectif que le "debug"; je complète.

    Après tout ça, tu auras un dossier Qt, un dossier boost et un dossier QxOrm comme il faut : quelque chose que tu maitrises pour ton développement, mais également par la suite pour le déploiement de ton application.
    In cha alla ... (humour ;-) )
    Toutes les sections du fichier QxOrm.pri sont documentées : si y a des choses que tu ne comprends pas dans le fichier, tu peux toujours poser des questions.
    Non; très bien documentées ...
    - peut-être la finalité des reprises de ce que fait Qt sur MOC_DIR, RCC_DIR, UI_DIR, UI_HEADERS_DIR, ... ?
    - peut-être, ... mais ce n'est pas important; l'essentiel est de parvenir à faire fonctionner, avec ce que génère QxEE,
    ce QxOrm qui se comporte très bien sûr mon autre projet surnommé "relations à la main".
    (dont j'ai déjà donné des exemples de fonctionnement ici).
    Donc je re-revoie le tutoriel et je reviens ...

  12. #12
    Expert confirmé
    Ah voilà un point déterminant; tu conseille d'utiliser ma propre compilation plutôt que la distribution Ubuntu installée par apt-get ? C'est bien cela ?
    Oui au moins tu seras certain de ce que tu as fait.
    Je te conseille de compiler boost serialization toi même (en utilisant bjam), en mode 32bits (puisque tu as choisi de travailler en 32b), fais une version debug, puis une version release.

    Une fois que c'est fait, modifie le fichier QxOrm.pri pour indiquer les bonnes valeurs aux paramètres "QX_BOOST_XXXX" : http://marty-lionel.developpez.com/t...s-windows/#LVI
    Ensuite recompile QxOrm en mode debug, et en mode release.
    Puis essaye de compiler et exécuter tous les projets de test du package QxOrm.
    Si tous les projets de test compilent et s'exécutent sans erreur ==> alors ton environnement de développement sera OK.
    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.