Le 02/06/2010 11:06, Vincent BRACH a écrit :
Salut Patrice

#include<mysql/mysql.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

void main(){

MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char *query,string[2500];
//char *query1;
int t,r;
mysql_init(mysql);
if (!
mysql_real_connect(mysql,"localhost","user","mdp","base",0,NULL,0))
{
printf( "Error connecting to database: %s\n",mysql_error(mysql));
}
else printf( "c'est bon ....");
query="select n1,n2,n3,n4,n5,n6,n7,n8,n9,n10 from keno";
if (mysql_query(mysql, query))
{
fprintf(stderr, "%s\n", mysql_error(mysql));
exit(0);
}
res = mysql_use_result(mysql);


ICI je pense que tu devrais tester ton pointeur "res" savoir s'il n'est
pas NULL car si un problème est survenu pendant la requette (genre le
n11 qui n'existe pas) tu peux te retrouver à passer à ta fonction
suivante (mysql_fetch_row) un res=NULL
while ((row = mysql_fetch_row(res)) != NULL)
{
      printf(
"%s|%s|%s|%s|%s|%s|%s|%s|%s|%s
\n",row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9]);
}
mysql_free_result(res);
mysql_close(mysql);
}

Perso je n'ai (mais beaucoup) travaillé qu'avec postgresql en C (et pas
mysql en C) mais ça à l'air assez similaire.

En tout état de cause je pense qu'un petit nettoyage de ton source est
nécessaire à plusieurs niveau :

- query="select n1,n2,n3,n4,n5,n6,n7,n8,n9,n10 from keno";<<  pas propre
du tout me mettre un char * = "une chaine"; surtout que ton pointeur
query n'est jamais alloué, contrairement à ton tableau de caractère
string qui est alloué statiquement (2500 en taille ça va c'est
peinard...)
Dans ce genre de cas privilégie plutôt quelque chose comme ça :
char query[2500];
sprintf(query, "select n1,n2,n3,n4,n5,n6,n7,n8,n9,n10 from
keno"); //stdio.h
ou
strcpy(query, "select n1,n2,n3,n4,n5,n6,n7,n8,n9,n10 from
keno"); //string.h

- il serait plus propre également d'utiliser un peu plus les boucles
for ;) :
à la place de printf( "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s
\n",row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9]);
plutôt faire un :
for (i=0;i<10;i++)
   printf("%s|", row[i]); //<<  certe tu auras un '|' pour le dernier
mais bon...
printf("\n");

- Tu pourrais faire une requette du type "select * from keno" et ensuite
récupérer le résultat et identifier indépendamment chacun de tes champs

- Je pense également qu'il serait grandement préférable qu'à chaque
appel de fonction (surtout issue de lib C Sql) il faut récupérer et
tester le retour de la fonction (pointeur ou valeur) ce que tu ne fais
pas pour la variable "res" (retour de mysql_use_result) que tu passe
directement à mysql_fetch_row.
Également tester les retour de 'mysql_free_result' et de 'mysql_close'
même si moins critique mais évite d'ignorer les fuites mémoires en cas
de soucis...

Voila, j'espère que ça pourra t'aider un peu.

@+
Vincent





  Diffusez cette liste aupres de vos relations :-)
     Linux Azur : http://www.linux-azur.org
     Vous etes responsable de vos propos.
*** Merci de rediger sans SMS, ni HTML ni PJ ***





Apparemment, il n'accepte que 10 champs pour ma table : j'ai essayé avec d'autres champs et il vautre toujours quand je lui demande d'afficher un onzième champ.

Le problème reste le même si je fais une boucle avec le nombre de fields.

Petite précision, je passe par l'EDI Code::Blocks pour éditer compiler et lance mon programme

PAtrice



Diffusez cette liste aupres de vos relations :-)
   Linux Azur : http://www.linux-azur.org
   Vous etes responsable de vos propos.
*** Merci de rediger sans SMS, ni HTML ni PJ ***



Répondre à