Stocker le resultat d'une requete sql en c++ dans un tableau [Résolu]

Signaler
Messages postés
6
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
29 avril 2007
-
ezneti
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009
-
Bonsoir, je travaille en ce moment sur un projet et j'utilise la MFC sous Visual Studio .Mon but est d'aller dans la base de données et de recuperer les resultats d'une requete  sql (select codebarre from entreprise )dans un tableau en c++.si qq'un peut m'aider ça sera très gentil merci .

15 réponses

Messages postés
179
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010

Quelle DB ?
Quellle API utilisée ?

Les infos sont minces et cela parait lége comme base de départ.....
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,

c'est du C mais pour le C++, tu remplace le calloc par new et tout et tout ...
pour recupere un id et un nom :
(ATTENTION LE RETOUR DES FONCTIONS NE SONT PAS TESTES, IL FAUT LE FAIRE)

/* a declarer dans un .h */
une structure pour stocker le resultat
struct s_resultat
{
    unsigned long id;
    char nom[255];
}

/* recup des resultats */
struct s_resultat* recupData(MYSQL *pMySql, int pNbRecord)
{
    MYSQL_RES *pRes = NULL;
    MYSQL_ROW row;
    char *pRequete = "SELECT id, nom FROM table ORDER BY nom";
    struct s_resultat *pResultat = NULL;

    /* execution de la requete,  retour a tester*/
    mysql_query(pRequte, pMySQL);

    /* recuperation du jeu d'enregistrement, a tester  */
    pRes = mysql_store_result(pMySql);

    /* nombre d'enregistrement (a retourner pour savoir la taille du tableau) */
    numRecord = pRes->row_count();

    /* allocation memoire pour le tableau, retour du malloc a tester */
    pResultat = (struct _resultat_*)calloc(numRecord, sizeof(struct _resultat_

    /* on recupere les datas */
    i = 0;
    while(row = mysql_fetch_row(pRes))
    {
        pResultat[i].id = strtoul(row[0]?row[0]:"0", NULL, 10);
        strcpy(pResultat[i].nom, row[1]?row[1]:"");
        i++
    }

    /* liberation de la memoire */
    mysql_free_result(pRes);
    pRes = NULL;
   
    /* et on retourne le resultat (il faudrait liberer pResultat, quand on aura fini avec lui) */
    return pResultat;

}

Pas Testé, Pas Compilé donc il peut y avoir des erreurs...

Matt...
Messages postés
6
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
29 avril 2007

merci bcp pour le code .je vais tester ce code pour voir si ça marche .au fait mon but :c'est de comparer un champ d'une table de ma base  de donnée(stocké dans un tableau) avec un  autre tableau .
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
ADO : LECTURE DANS TABLEAU (WIN32)
http://www.cppfrance.com/code.aspx?id=23130

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
29 avril 2007

en fait j'ai mal expliqué .en fait je veux  recuperer les resultats dans un tableau de chaines de caracteres .
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

bonjour,
j'ai établit la connexion avec une base de données mysql en c++.
j'arrive pas à recupérer le resultat d'un select dont plusieurs champs figurent.
j'ai essayer ce code aprés qq modifications pas des erreurs de compilation ni d'execution mais j'arrive pas à récupérer le bon résultat dans un tableau de char.
personne c comment faire merci
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

j'ai pas compris
* on recupere les datas */
i = 0;
while(row = mysql_fetch_row(pRes))
{
pResultat[i].id = strtoul(row[0]?row[0]:"0", NULL, 10);
strcpy(pResultat[i].nom, row[1]?row[1]:"");
i++
}
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,

    Il faut d'abord que tu verifies que tu n'as pas d'erreur en testant le retour des fonctions tel que mysql_query(pRequte, pMySQL);

    Ensuite, verifies que tu as bien des données : numRecord = pRes->row_count();. Il faut que tu tests numRecord pour voir s'il est != 0

     Si tu n'arrives pas à recupere le bon resultat dans ton tableau de char, peut-être que ta requete n'est pas bonne.

Matt...
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

merci pour la reponse,
jarrive à recuperer le resultat mais il reste un problème des requetes de mise à jour "update" ils ne sont pas prise en compte dans le programme
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

pour expliquer plus j'affiche le resultat et tout est bon puis j'applique une requete update puis le même affichage des faux resultats sont affichés
je verifie avec les mêmes requetes dans mysql les resultats ne resemblent pas je trouve pas ou est le problème dans mon code
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Est ce que tu peux poster le code de ta requete de select ainsi que le code de ta requete update ou bien (mieux) peux tu mettre un lien où l'on peut voir le code entier (ou la partie où il y a des soucis)

Matt...
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

bonjour,
j'ai defini une methode pour récupérer les données de mes tables dont le type de retour est float* puisque les champs de mes tables sont de type float tout va bien.
j'utilise l'appel de cette methode dans plusieurs autres methodes de calcul qui sont nécessaire pour mon programme. Lors du test je fait appel à ces methodes la première itération passe bien et puis un debogage se lance je pense que c'est un problème de mémoir.
voici le code de récuperation de données:


float* recupData(char* requete)
{
MYSQL_RES *pRes = NULL;
MYSQL_ROW row;
mysql_query(Requte, pMySQL);
pRes = mysql_store_result(pMySql);
numRecord = pRes->row_count();
float *pResultat =new float[numRecord];
i = 0;
while(row = mysql_fetch_row(pRes))
{
pResultat[i] = atof(row[0]?row[0]:"0", NULL, 10);
i++
}

mysql_free_result(pRes);
pRes = NULL;
return pResultat;
delete []peRsultat
}
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

est ce que tu travailles avec la connexion via ODBC ou avec les fichiers include de mysql et c++.
j'ai pas trouvé un code de connexion via ODBC peut être c'est meilleur?ou la même chose?
merci de me répondre
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

1er point : controle le retour de la fonction mysql_query et aussi du new.
2eme point : regarde si tu as des enregistrements (row_count). Si c'est égal à 0, ce n'est pas la peine d'aller plus loin.
3eme point : le delete de pResultat, tu ne dois pas le faire dans la fonction mais quand tu ne te sers plus de pResultat (descructeur par exemple), de toute façon, ou il est placé, il ne sert a rien.

Pour ma part, ODBC, je ne connais pas donc je n'utilise pas !!!

Matt...
Messages postés
23
Date d'inscription
lundi 26 mars 2007
Statut
Membre
Dernière intervention
29 octobre 2009

merci Matt67
je trouve pas de problème au niveau de cette methode je pense que c'est un problème de transaction puisque la première itération marche bien mais au niveau de la deuxième il y a debogage
et si je fais la première itération tout est bon pui j'execute une deuxième fois la deuxième itération se fait correctement.