begin process at 2012 05 29 17:18:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

SQL

 > 

probleme : format du resultat de la requette mysql avec c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme : format du resultat de la requette mysql avec c++

mardi 20 décembre 2011 à 11:56:00 | probleme : format du resultat de la requette mysql avec c++

bouzazi

Bonjour tout le monde,
je suis entrain de développe un programme en c++ avec visual studio 2003 qui doit crée des objets, je récupéré les valeurs des variables des objets dans une base de donnée mysql.
mon programme arrive a ce connecte a la base, il récupéré les données sans problème apparent.
Mais dans une des méthodes j'utilise la valeur d'un résultat d'une des requête que j'affecte a un int, et j'utilise cette variable pour crée une seconde requête. le problème est que la valeur que je récupéré est sous la forme "0x00000001" pour une valeur dans la table égale a "1".
et l’exécution de mon programme s’arrete et visuall me renvoi le message suivant :
"Exception non gérée à 0x58b387b8 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xccccd07c."

donc ma question est comment je peut faire pour modifie la représentation d'un int de la forme "0x00000001" on une représentation simple '1".
voici la méthode en question :

la variable qui me pose problème et Matiere_Id que j'utilise dans la deuxième requête.
(désolé, je sais que mon code n'est pas optimal mais j'essaye d’arrivé a un résultat c tout)
Code C/C++ :
void CConnexion::Remp_Course_Class()
{
	MYSQL_RES *res, *res1;
	MYSQL_FIELD *fd, *fd1;
	UINT num_fields, num_fields1;
	MYSQL_ROW row, row1;
	UINT i = 0;
	UINT j = 0;
	UINT k = 0;
	int nb_seance1,nb_seance2;
	nb_seance1=0;
	nb_seance2=0;

	int CourseClass_Id=0;
	int ID=0;
	int Class_Id, Matiere_Id, Prof_Id, duree, nb_h_total, nb_h_groupe, nb_h_lab, nb_h_max, nb_h_min, priorite,
		periode_prefere;
	bool CourseClass_Lab;
	time_t CourseClass_modifie_le;
	CString CourseClass_modifie_par;	

	if (IsConnected)
		{
			if (( mysql_query(myData, "SELECT * FROM matiere_classe") == 0))
			{
				res = mysql_store_result(myData);
				num_fields = mysql_num_fields(res);
				fd = mysql_fetch_fields(res);
				while ( (row = mysql_fetch_row(res)))
				{				
					for (j = 0; j < num_fields; j++)
					{
						switch ( j )
							{
								case 0 :
									break;
								case 1 :
									Class_Id = atoi(row[j]);
									break;
								case 2 :
									{
										Matiere_Id = atoi(row[j]);
										break;
									}
								case 3 :
									Prof_Id =  atoi(row[j]);
									break;
								case 4 :
									{
										CString temp =  row[j];
										CourseClass_Lab = (temp=='1');			
										break;
									}
								case 5 :
									CourseClass_modifie_le = atol(row[j]);
									break;
								case 6 :
									CourseClass_modifie_par = row[j];
									break;
								default:
									break;
							}
					}
					
					if (( mysql_query(myData1, "SELECT * FROM matiere WHERE ID=Matiere_Id") == 0))
					{
						res1 = mysql_store_result(myData1);
						num_fields1 = mysql_num_fields(res1);
						fd1 = mysql_fetch_fields(res1);
						row1 = mysql_fetch_row(res1);				
						for (k = 0; k < num_fields; k++)
						{
							switch ( k )
								{
									case 5 :
										nb_h_total = atoi(row1[k]);
										break;
									case 6 :
										nb_h_groupe = atoi(row1[k]);
										break;
									case 7 :
										nb_h_lab =  atoi(row1[k]);
										break;
									case 8 :
										nb_h_max =  atoi(row1[k]);
										break;
									case 9 :
										nb_h_min = atoi(row1[k]);
										break;
									case 10 :
										priorite = atoi(row1[k]);
										break;
									case 11 :
										periode_prefere = atoi(row1[k]);
										break;
									default:
										break;
								}
								CourseClass* tmp_CourseClass = new CourseClass(ID, Class_Id, Matiere_Id, Prof_Id, 
									CourseClass_Lab, duree, nb_h_total, nb_h_groupe, nb_h_max, nb_h_min, priorite,
									periode_prefere, CourseClass_modifie_le, CourseClass_modifie_par);
								_courseClasses.push_back( tmp_CourseClass );
						}
				mysql_free_result(res);
			}
			}
			}
			else  // Something went wrong
			{
				fprintf (stderr,"Error  mysql_errno" , mysql_error (myData));
			}
		}
	else  // Something went wrong
		{
			fprintf (stderr,"Error  mysql_errno" , mysql_error (myData));
		}
}



Merci beaucoup pour votre aide
mercredi 21 décembre 2011 à 02:20:38 | Re : probleme : format du resultat de la requette mysql avec c++

racpp

Administrateur CodeS-SourceS
Salut,
Il y'a une erreur dans ta deuxième requête. On ne peut pas mettre le nom de la variable dans la requête. Il faudrait la construire dans un buffer pour pouvoir y mettre la valeur de ton entier récupéré. Exemple:
Code C/C++ :
char szrequete[200];
strcpy(szrequete,"SELECT * FROM matiere WHERE ID=");
itoa(Matiere_Id,szrequete+strlen(szrequete),10);
if (mysql_query(myData1,szrequete)==0)
{
    //...
}

Ton code plante car, suite à l'exécution de ta deuxième requête, tu appelles mysql_fetch_row() sans t'assurer que res1 est valide. Puisque la requête n'est pas correcte, res1 ne sera pas valide. Ainsi, row1 ne sera pas valide non plus. En essayant d'accéder à row1, ton programme plantera.
Essaie d'organiser ton code comme ceci:
Code C/C++ :
res1 = mysql_store_result(myData1);
if(res1)
{
    num_fields1 = mysql_num_fields(res1);
    fd1 = mysql_fetch_fields(res1);
    row1 = mysql_fetch_row(res1);
    if(row1)
    {
        for (k = 0; k < num_fields; k++)
        {
            //...
        }
    }
}


Cette discussion est classée dans : mysql, break, id, nb, courseclass


Répondre à ce message

Sujets en rapport avec ce message

ptit probleme [ par aladdin_wydadi ] voila le code source ke j'ai trouvé : #include#include //--------------------------------------------------------------------// Conversion d'un nombre j'arrive pas à compiler ce code !! [ par achourmeddeb ] bonsoir tout le monde , j'ai un projet à rendre mais je n'arrive pas à compiler ce code et je pense que le problème réside dans l'une des trois foncti n'arrive pas a clignoter le message [ par cyro31 ] Edouard Voilà dans la doc de mon afficheur je peux mettre des caractères clignotant par exemple pour un 'A' c'est 0xC1 clignotant mais le problème es codage labyrinthe [ par fredbubu65 ] Frédéric.[^^happy13] Bonjour, quelqu'un pourrait-il me commenter ce programme(qui fonctionne)ci-dessous. Les commentaires à mettre y sont avec ce mod codage en C sous Linux [ par fredbubu65 ] Frédéric.[^^happy13] Bonjour, je dois faire un programme sous Linux en C avec la bibliothèque Ncurses. Ca c'est pas trop le problème. Le code est à pr Récupérer les pixels d'une image bmp [ par MannanaJbali ] Salut tout le monde: Je fais un programme de traitement d'image, j'ai chargé une image de type bmp et j'ai enregistrer les pixels dans un fichier text aide [ par ghostmiki ] voila je demande votre aide pour m'explique comment faire une analyse lexical de sa: [code=cpp]R = { P ®Program id S_DCL Début S_INST Fin Postfix - Pop & Imap - MySQL [ par tomixx ] Bonsoir chers Camarades, A l'aide du tuto de Space2d sur [url=http://www.lea-linux.org/documentations/index.php/Postfix-courier-mysql-quota-spamassas grammaire non contextuelle [ par nissaf ] svp vs pouvez m'aider à cômprendre cette grammaire: demandé: analyse lexical/syntaxique/sémantique G=(V,T,P,R) V= {P.S DCL. DCL.S INST.INST.Expb.Expr. Tableau de pointeurs sur les noeuds d'un arbre [ par ssana83 ] Bonjour, Je me demande si vous pouvez m'aider concernant un programme dans lequel j'ai créé une file (tableau qui contient des pointeurs sur des noeud


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,778 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales