Stocker le resultat d'une requete sql en c++ dans un tableau

Résolu
mamstyle Messages postés 6 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 29 avril 2007 - 17 févr. 2007 à 23:19
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009 - 8 mai 2007 à 10:38
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

cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
18 févr. 2007 à 08:04
Quelle DB ?
Quellle API utilisée ?

Les infos sont minces et cela parait lége comme base de départ.....
3
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
18 févr. 2007 à 08:37
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...
3
mamstyle Messages postés 6 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 29 avril 2007
18 févr. 2007 à 12:19
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 .
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 févr. 2007 à 12:25
ADO : LECTURE DANS TABLEAU (WIN32)
http://www.cppfrance.com/code.aspx?id=23130

ciao...
BruNews, MVP VC++
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamstyle Messages postés 6 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 29 avril 2007
18 févr. 2007 à 12:41
en fait j'ai mal expliqué .en fait je veux  recuperer les resultats dans un tableau de chaines de caracteres .
3
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
3 mai 2007 à 08:20
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
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
3 mai 2007 à 10:10
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++
}
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
5 mai 2007 à 07:19
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...
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
5 mai 2007 à 11:28
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
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
5 mai 2007 à 11:36
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
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
5 mai 2007 à 15:27
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...
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
7 mai 2007 à 10:29
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
}
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
7 mai 2007 à 10:48
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
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
7 mai 2007 à 19:44
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...
0
ezneti Messages postés 23 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 29 octobre 2009
8 mai 2007 à 10:38
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.
0
Rejoignez-nous