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

C++Builder Discussion :

Récupérer et trier le résultat d'une requête SQL


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Récupérer et trier le résultat d'une requête SQL
    Bonjour à tous.

    Voilà, je débute au niveau de l'attaque d'une base Oracle sous C++ Builder 6, voici mon problème :

    Pour simplifier, disons que j'utilise une table nommée "INFO_PERSONNE", qui contient plusieurs champs "MATRICULE", "NOM", "PRENOM", "ADRESSE".

    Au niveau de la connexion à la base Oracle c'est bon, j'arrive à effectuer une requête et à l'afficher dans un TDBGrid, à l'aide de ce petit tutorial.

    Seulement, j'ai besoin d'afficher les divers champs NOM, PRENOM, ADRESSE dans des zones d'édition séparées, et non pas dans un DBGrid.

    Ma question est donc : imaginons que je lance la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM INFO_PERSONNE WHERE MATRICULE = '03'
    Comment en récupérer le résultat afin de trier les informations et les placer dans les zones d'édition prévues à cet effet?


    D'avance merci beaucoup, pardonnez ma newbitude en BDD ^^.

  2. #2
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    tu utilises un DBGrid?..alors pourquoi ne pas utiliser un DBEdit?

    Si tu ne veux pas tu peux tjrs faire kkchose dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid->DataSource->DataSet->FieldByName("ton_champ")->AsString
    tch'o

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse.

    Cependant, sachant que cette requête me renvoie plusieurs éléments (en l'occurence, le nom, le prénom et l'adresse), y a t'il moyen de récupérer ces 3 éléments dans des AnsiString distinctes en une seule requête sans passer par le biais d'un affichage sur la Fiche?

    Merci d'avance.

  4. #4
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    je suis désolé mais je ne comprends pas ce que tu veux faire...
    avec la ligne de code que je t'ai donné, il suffit d'afffecter le résultat dans des variables...

    Je t'ai parlé des composants orientés données car tu parles d'une zone de saisie...

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta patience en tout cas, je vais essayer de m'expliquer plus clairement.

    J'ai une classe nommée ClassePersonne, qui possède entre autres les attributs nom, prenom et adresse (tous de type AnsiString).

    Au démarrage de mon application, afin d'éviter d'aller taper sans arrêt dans la BDD, je souhaite charger les informations de la BDD INFO_PERSONNE dans un tableau d'objets de type ClassePersonne.

    Le code serait de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (int i = 0; i < NB_PERSONNES; i++) {
     
        //ici j'exécute ma requête SQL : SELECT * FROM INFO_PERSONNE WHERE MATRICULE = 'i'
     
        vectPersonnel[i] = new ClassePersonne() ;
        vectPersonnel[i]->nom = ?
        vectPersonnel[i]->prenom = ?
        vectPersonnel[i]->adresse = ?
     
    }
    Ce que je souhaite, c'est remplacer les "?" par le moyen de récupérer les données renvoyées par la requête SQL sans utiliser de DBGrid, DBEdit ou quoi que ce soit de visuel.

    Si vous souhaitez plus d'informations n'éhsitez pas à me le demander. Merci beaucoup d'avance.

  6. #6
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    Il te faut faire quelques chose comme ceci

    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
     
    for (int i = 0; i < NB_PERSONNES; i++) {
     
        AnsiString SQL " SELECT * FROM INFO_PERSONNE WHERE MATRICULE = 'i' ";
        Query1->SQL->Clear();
        Query1->SQL->Add(SQL);
        Query1->Open();
     
        if(!Query1->Eof)
        {
           vectPersonnel[i] = new ClassePersonne() ;
           vectPersonnel[i]->nom = Query1->FieldByName("NOM")->AsString;
           vectPersonnel[i]->prenom = Query1->FieldByName("PRENOM")->AsString;
           vectPersonnel[i]->adresse = Query1->FieldByName("ADRESSE")->AsString;
        }
        Query1->Close();
     
    }
    Ceci est un exemple, mais je ne connait pas la structure de ta table
    Bonne continuation

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Boubou81 a donné une bonne méthode! Cependant, j'ai pu noté une petite erreur

    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
    for (int i = 0; i < NB_PERSONNES; i++) {
    
        AnsiString SQL = " SELECT * FROM INFO_PERSONNE WHERE MATRICULE = (AnsiString)i ";
        Query1->SQL->Clear();
        Query1->SQL->Add(SQL);
        Query1->Open();
    
        if(!Query1->Eof)
        {
           vectPersonnel[i] = new ClassePersonne() ;
           vectPersonnel[i]->nom = Query1->FieldByName("NOM")->AsString;
           vectPersonnel[i]->prenom = Query1->FieldByName("PRENOM")->AsString;
           vectPersonnel[i]->adresse = Query1->FieldByName("ADRESSE")->AsString;
        }
        Query1->Close();
    
    }
    J'ai mis en rouge l'erreur. Par contre,je ne pense pas que ce qui est en vert soit nécessaire. Aussi, ce que je pense être plus juste, je l'ai mis en bleu.

    Que de couleurs
    J'espère que cela fonctionnera

    EDIT :

    De plus, j'ai oublié, pour le Query1->Close(); , il vaudrait mieux le mettre après la boucle for (sans être vraiment sur).

  8. #8
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    Oups pardon c'est vrai, j'ai été trop vite dans ma rédaction.
    Toutes mes excuses

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour vos réponses avisées!

    Vous cartonnez!

    Hop, résolu!

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

Discussions similaires

  1. Trier les résultats d'une requête à l'aide d'un listbox
    Par magoo33 dans le forum Coldfusion
    Réponses: 2
    Dernier message: 17/11/2008, 22h27
  2. Récupérer le résultat d'une requête SQL (count)
    Par niano dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/09/2007, 11h41
  3. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  4. [JTable] Récupérer le résultat d'une requête SQL
    Par malik1982 dans le forum Composants
    Réponses: 10
    Dernier message: 08/07/2006, 19h52
  5. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07

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