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 :

Requête avec un WHERE sur un Uuid (à travers les services)


Sujet :

QxOrm

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut Requête avec un WHERE sur un Uuid (à travers les services)
    Bonsoir,

    est ce qu'il est possible de faire un SELECT ou le WHERE porterait sur un Uuid ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QUuid teamId = _teamModel->getModelValue(index.row(), "Uuid").toUuid();
    qx_query query;
    query.where("team_id").isEqualTo(teamId);
    _userTeamModel->qxFetchByQuery(query);

  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


    Tu peux considérer un QUuid comme un QString.
    La méthode qx_query::isEqualTo() prend un QVariant en paramètre, et il n'y a pas de constructeur de ce type : QVariant(const QUuid &)
    Donc essaye d'écrire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.where("team_id").isEqualTo(teamId.toString());
    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 à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    J'ai testé votre solution, mais elle ne marche pas. Cela ne me retourne aucun résultat. J'ai tenté d'autre condition(isnotnull ou isnull) pour voir si ma fonction QxFetchByQuery retourné des résultats, et elle me retourne bien des resultats.
    Il y a un moyen de voir la requête qui est executé (sans les paramètre ( ex: ":param1")) ?

  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
    J'ai testé votre solution, mais elle ne marche pas. Cela ne me retourne aucun résultat.
    C'est bizarre, car la bibliothèque QxOrm gère la classe QUuid comme un QString.

    Il y a un moyen de voir la requête qui est executée (sans les paramètre ( ex: ":param1")) ?
    Non, il y a un moyen de voir les résultats d'une requête (en utilisant la méthode qx::QxSqlDatabase::setTraceSqlRecord()), mais pas les paramètres d'entrée.

    Essaye de faire ceci :
    1- Exécute QString sUuid = teamId.toString(), puis regarde la valeur de sUuid ;
    2- Ouvre ta BDD, et regarde la valeur du champ dans la table ;
    3- Compare les 2 valeurs : est-ce qu'elles sont identiques ?
    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 à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    En faite, quand je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    qx_query query ("WHERE team_id like '{f56d921d-3b89-4d3c-b58a-721bd84d8cf3}'");
    _userTeamModel->qxFetchByQuery(query);
    Cela marche, mais quand j'essaie de rendre la query dynamique cela fonctionne plus et même parfois cela fait planter le serveur qui a load les services.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    J'ai réussi a la rendre dynamique comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    qx_query query;
    QString strQuery = "WHERE team_id like '" + teamId.toString() + "'";
    query.query(strQuery);
    _userTeamModel->qxFetchByQuery(query);
    Est ce normal qu'avec un query.bind ou query.where, cela ne marche pas ?

  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
    Est ce normal qu'avec un query.bind ou query.where, cela ne marche pas ?
    Non ça devrait marcher !

    Tes requêtes déclenchent des services client-serveur, c'est bien ça (j'ai modifié le titre du sujet) ?
    Si oui, alors le soucis pourrait venir de la serialization/deserialization de la classe qx_query (ou qx::QxSqlQuery).

    Est-ce que tu as le problème qu'avec des QUuid ?
    Tu pourrais essayer stp de binder un autre type (QString ou long ou autre chose) ?

    Je supprime le statut "Résolu" du sujet pour le moment, car c'est possible qu'il y a un problème.
    Mais je pense que le soucis est lié à la couche client-serveur...
    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.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Tes requêtes déclenchent des services client-serveur, c'est bien ça (j'ai modifié le titre du sujet) ?
    oui.

    Si oui, alors le soucis pourrait venir de la serialization/deserialization de la classe qx_query (ou qx::QxSqlQuery).
    Effectivement, c'est ce que je pense après avoir debug. il me semble que la query était vide alors qu'elle ne devrait pas.

    Est-ce que tu as le problème qu'avec des QUuid ?
    Tu pourrais essayer stp de binder un autre type (QString ou long ou autre chose) ?
    J'ai testé avec d'autre type, il y avait bien le même problème.

  9. #9
    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
    Il y avait bien un soucis avec la serialization de la classe qx_query !
    J'ai essayé d'apporter une correction, elle est disponible à partir de cette version (QxOrm 1.3.1 BETA 28) : http://www.qxorm.com/version/QxOrm_1.3.1_BETA_28.zip

    Remarque : il y a 3 cas à tester (envoi de qx_query par services client -serveur) :
    • 1- la requête SQL est construite manuellement (ce que tu faisais pour contourner le bug de serialization) :
      qx_query myQuery("WHERE my_column = 'xxxx'");
    • 2- la requête SQL est construite manuellement et les valeurs sont bindées :
      qx_query myQuery("WHERE my_column = :val1"); myQuery.bind(":val1", "xxxx");
    • 3- la requête SQL est construite avec les méthodes C++ :
      qx_query myQuery; myQuery.where("team_id").isEqualTo(teamId.toString());



    Pourrais-tu tester ces 3 cas stp avec la dernière version BETA de QxOrm ?
    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.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Oui pas de soucis.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 31
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    j'ai testé les 3 points, et maintenant cela fonctionne a parfaitement.

    Merci pour ce correctif.

  12. #12
    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'ai testé les 3 points, et maintenant cela fonctionne parfaitement.
    Merci pour ce correctif.

    Merci pour les tests !
    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. [MySQL] Requête simple avec un Where sur un champ utf8_bin
    Par Romanops dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/08/2011, 17h35
  2. Réponses: 4
    Dernier message: 26/07/2011, 12h29
  3. requête avec un where sur une date
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 06/02/2011, 21h58
  4. Réponses: 16
    Dernier message: 20/01/2011, 13h45
  5. Requête avec variable incrémentée sur changement de clé.
    Par souellet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 23h47

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