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

GTK+ avec C & C++ Discussion :

Lier un widget (GtkEntry) à un enregistrement d'une bdd (Sqlite3)


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Par défaut Lier un widget (GtkEntry) à un enregistrement d'une bdd (Sqlite3)
    Bonjour,

    Je cherche une solution pour lier un widget GtkEntry à un enregistrement d'une base de donnée (Sqlite3).
    Mon programme est codé en C.

    Prenons un exemple.

    -J'ai une bdd avec une seule table "t_fruits" qui est composée de deux champs "id" et "designation".
    -Une fonction de mon programme rempli un tableau de caractères à trois colonnes avec en première colonne les indices du tableau (1,2,3,4,...) et ensuite le contenu de ma table "t_fruits".
    -Une autre fonction affiche le contenu du tableau dans différents champs texte (GtkEntry) dans la fenêtre de mon programme :

    Indice tab | Id | Designation
    ----------------------------------------------------
    1 | 1 | Pomme
    2 | 2 | Banane
    3 | 8 | Poire
    4 | 23 | Framboise

    Si je double clique dans le champs texte où est écrit "Poire", je voudrais que mon programme sache que ce champ texte correspond à la ligne d'indice 3 de mon tableau de caractère. Je pourrai donc ensuite récupérer l'Id de mon enregistrement (c'est-à-dire 8) pour travailler dessus.

    Si cela peut aider quelqu'un, sous Ms Access, chaque champ texte a un identifiant unique qui nous permet d'appeler ce champ dans le code VBA.
    Je cherche quelque chose du même type.

    Je ne sais absolument pas vers quoi me diriger.

    Avez-vous une piste à me conseiller ? Une fonction ? Mon raisonnement est-il mauvais ?

    J'espère que mon post est assez compréhensible. N'hésitez pas à demander plus d'informations si besoin.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Un GtkEntry hérite d'un GtkWidget. Un GtkWidget hérite d'un GObject.

    Il existe une possibilité avec les GObject rarement utilisée. Il disposent d'un tableau associatif libre dans lequel on ajoute des données personnelles. Ce tableau est accessible via les fonctions g_object_set_data (); (ou sa variante g_object_set_data_full();) et g_object_get_data();.

    Tu peux donc ajouter tes indices à chaque GtkEntry et ainsi connaître à tout moment leur position dans table.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Par défaut
    Bonjour,

    Je vais me pencher sur votre solution mais si d'après vous c'est rarement utilisé, quelle est donc la manière de faire "générale" pour afficher le contenu d'une table d'une bdd (sqlite3 ou autre) dans une fenêtre de mon programme tout en permettant par double clique sur un champ de remonter au bon enregistrement ?

    Imaginons une liste de fruits avec leur taille , poids, couleur, ... affichée à partir d'une bdd.
    Si je double clique sur "jaune" sur la ligne de "banane" pour pouvoir modifier l'enregistrement dans ma bdd, quel est donc le "shéma" le plus courant pour faire ça ?

    Exécuter la requête pour modifier le champ ne me pose pas de problème. Savoir quel est l'identifiant de l'enregistrement sur lequel je viens de double cliquer est mon problème.

    En espérant que je vous me compreniez...

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    En général on utilise un GtkTreeView avec un GtkListore. Il est possible de créer une (ou plusieurs) colonne invisible à l'utilisateur qui contiennent l'information que tu veux.

    Mais ce n'est pas parce que les userdata des GObject ne sont pas couramment utilisés (surtout par les lecteurs de ce forum) qu'ils sont à proscrire. La difficulté inhérente à leur utilisation est que le code source est difficile à comprendre pour un tiers.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Par défaut
    Je vais étudier les deux pistes avant de prendre ma décision.

    Cependant, je me pose une question à propos des GtkTreeView.

    Je viens de survoler la doc et je vois qu'ils héritent de GtkContainer puis de GtkWidget.
    Les GtkEntry quant à eux héritent directement de GtkWidget.
    Cela implique-t-il donc qu'on ne peut pas placer un GtkEntry dans un GtkTreeView ?

    Je demande cela car j'ai l'impression qu'avec un GtkTreeView on est obligé d'avoir un affichage du style d'une "grille" ou d'un "tableur", comme ceci :

    Pièce jointe 143602

    Je voudrai plutôt quelque chose comme une grille de champs textes espacés les uns des autres, de ce style là :

    Pièce jointe 143600



    Est-ce possible avec un GtkTreeView sans être trop lourd à mettre en place ?

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Je prendrais un GtkGrid avec des GtkEntry pour obtenir ce que tu cherches. Mais ce n'est que mon avis...

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

Discussions similaires

  1. [WD10] Récupérer le num d'enregistrement dans une BDD HF
    Par lepirate dans le forum WinDev
    Réponses: 7
    Dernier message: 11/07/2009, 17h59
  2. [WD10] Connaitre le numéro d'enregistrement dans une BDD HF ?
    Par lepirate dans le forum WinDev
    Réponses: 3
    Dernier message: 27/06/2009, 18h33
  3. Incrémenter une lettre pour enregistrement dans une bdd
    Par baggie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2008, 16h26
  4. Réponses: 2
    Dernier message: 17/04/2007, 11h44
  5. [C#] Supprimer un enregistrement dans une BDD
    Par Filippo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/07/2006, 12h02

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