Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Aidez moi pour mon prog svp ;-) (2eme probleme)


Messages recommandés

Posté(e)

Je ne vois pas d'erreur dans ton code. J'imagine que cela vient d'une utilisation incorrecte des fonctions de cette dll ou simplement d'un bug dans celle-ci.

 

Mais Kewlcat a raison. Place un point d'arrêt au début de void __fastcall TForm1::Button3Click(TObject *Sender) puis exécute pas à pas pour voir quand se produit l'erreur. Tu auras peut être plus de précisions sur la source du problème.

Posté(e)

J'ai fait un debogage pas a pas l'erreur se prdit a la derniere accolade quand le prog quitte le fastcall du bouton3.

Posté(e)
l'erreur se prdit a la derniere accolade
C'est le destructeur de l'objet qui foire ??
quand le prog quitte le fastcall du bouton3
Ca correspond à quelle méthode ?

Quel est l'objet qui appelle cette méthode ?

Y aurait-il, par hasard, des effets de bord qui ne seraient pas respectés ? (des trucs à changer dans l'objet appelant, ce genre de connerie si pénible à débugger....)

 

Il suffit que tu sois censé avoir rempli un champ pendant cette méthode (et que tu ne le fasses pas) pour que le message d'erreur s'affiche... et ce n'est qu'un exemple de ce qui peut se passer... :-/

Posté(e)

Tout bien réfléchi, il y a une erreur dans ton code. Ce n'est pas supposé produire l'erreur que tu constates mais...

Il ne faut pas créer l'objet bdd = new TMySQL(); à chaque clic sur le bouton 1. Sinon tu vas créer des objets à chaque clic et perdre les adresses des précédents. Crée une bonne fois pour toute cet objet dans le constructeur de la fenêtre et détruit le par delete dans un événement tel que OnClose ou OnDestroy.

 

Sinon on peut imaginer un bug dans la dll. Essaie de placer les variables : AnsiString requete, donnee; int reponse; unsigned int i,j; unsigned int nb_champs, nb_enregistrements; comme membres de la fenêtre Form1 (fichier .h correspondant) ou bien comme variables globales (à côté de bdd). De la sorte, elles ne seront plus détruites à la fin de button3Clic().

Posté(e)

Merci des conseil _Michel_ et Kewlcat, mon tp est fini depuis un moment, mais j'aimerai bien avoir un truc qui tourne rond pas avec une erreur, je vais donc demander le codage des 2 DLL a mon prof demain et je regarderai sa. Je le publierai sur le site.

Posté(e)

Salut, je me suis comme prévu procuré le code de la dll aujourd'hui le voici, je cherche egalement de mon coté.

 

 


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "TMySQL.h"

TMySQL::TMySQL()
{
//  mySQL = mysql_init(NULL);
}

void TMySQL::fermerConnexion()
{
 mysql_close(mySQL);
}

bool TMySQL::ouvrirConnexion(char *adr, char *nom, char *pass, char *nomBase, unsigned int port)
{
 mySQL = mysql_init(NULL);
 if (mysql_real_connect(mySQL,adr,nom,pass,nomBase,port,NULL,0))
return true;
 else
return false;
}

bool TMySQL::accesTables()
{
 myRES = mysql_list_tables(mySQL,NULL);
 if (myRES)
return true;
 else
return false;
}

int TMySQL::envoyerRequete(char *req)
{
 int ret;

 ret = mysql_query(mySQL,req);
 return ret;
}

int TMySQL::reponseRequete()
{
 myRES = mysql_store_result(mySQL);
 if (myRES)
return 1;
 else
return 0;
}

unsigned int TMySQL::numeroErreur()
{
 return mysql_errno(mySQL);
}

AnsiString TMySQL::messageErreur()
{
 return mysql_error(mySQL);
}

unsigned int TMySQL::nbEnregistrements()
{
 if (myRES)
return myRES->row_count;
 else
return 0;
}

unsigned int TMySQL::nbChamps()
{
 if (myRES)
return mysql_num_fields(myRES);
 else
return 0;
}

void TMySQL::libererRessource()
{
 if (myRES)
mysql_free_result(myRES);
}

AnsiString TMySQL::recupererColonne(int i)
{
 if (myRES)
return myROW[i];
 else
return AnsiString("");
}

void TMySQL::recupererEnregistrement()
{
 myROW = mysql_fetch_row(myRES);
}
//---------------------------------------------------------------------------

#pragma package(smart_init)

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...