Erreur d'exception avec mysql_query

L0pez Messages postés 5 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 15 décembre 2012 - 1 mars 2011 à 12:13
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 4 mars 2011 à 14:26
Bonjour à tous,

Je bute sur une erreur pour updater une table. Ma requête contenue dans une variable AnsiString (Rqx) est la suivante :

UPDATE users SET code='A.ADMI',noms='ADMIN',prenoms='ADMIN',mobile='00.00.00.00',typusers='1',password='XXXXX' where id='1'

et, lorsque je fais mysql_query(MySQL, pChar(Rqx)) j'obtiens inévitablement une erreur d'exception pour cette requête particulièrement. Toutes les autres (select * from.....) fonctionnent à merveille.

La déclaration de ma table est la suivante :

SQL_USERS : AnsiString = 'CREATE TABLE IF NOT EXISTS users (id TINYINT(0) NOT NULL AUTO_INCREMENT PRIMARY KEY, code varchar(6) UNIQUE,' + ' noms varchar(30) DEFAULT NULL, prenoms varchar(30) DEFAULT NULL, mobile varchar(12) DEFAULT NULL, typusers boolean DEFAULT FALSE, password varchar(32) DEFAULT NULL)';

Une idée ? Merci

7 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
1 mars 2011 à 20:22
Bonsoir

Quelle est l'exception que tu obtiens ?

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
L0pez Messages postés 5 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 15 décembre 2012
2 mars 2011 à 08:03
Bonjour WhiteHippo,


La suivante "EAccessViolation at address 10006F46 in module libmysql.dll"

Merci
0
L0pez Messages postés 5 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 15 décembre 2012
2 mars 2011 à 11:27
J'ai pu décanter un peu la situation. J'obtiens un message MySQL supplémentaire "Commands out of sync; you can't run this command now" avant d'obtenir la même erreur d'exception.

Qui selon le manuel, "le problème vient du fait que vous appelez les fonctions dans le mauvais ordre dans votre code !

Cela peut se produire, par exemple, si vous utilisez mysql_use_result() et essayez d'exécuter une nouvelle requête avant d'avoir appelé mysql_free_result(). Cela peut aussi se produire si vous essayez d'exécuter deux requêtes qui retournent des données dans appeler mysql_use_result() ou mysql_store_result() entre les deux."

Mais avant d'utiliser "mysql_use_result()", il faudrait bien que ma requête soit exécutée, n'est ce pas ??? Et, j'ai mis en commentaire la ligne "mysql_free_result()", mais rien ! De plus, je n'ai qu'une seule condition dans ma fonction :

if mysql_query(MySQL, pChar(SQL_USERS)) = 0 then.... où SQL_USERS correspond à

UPDATE users SET code='A.ADMI', noms='ADMIN', prenoms='ADMIN', mobile='00.00.00.00', typusers='1', password='XXXXX' where id='1'
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
3 mars 2011 à 15:30
Bonjour,

Pour les Upadte j'utilise

mysql_real_query(LibHandle, PAnsiChar(sql), Length(sql))

Si tu peux faire un test ?

Jean
0

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

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
3 mars 2011 à 22:25
Bonsoir

Une question juste au cas où :
As-tu un point virgule final dans tes requetes?

N.B. Si oui, réessayes en le supprimant.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
L0pez Messages postés 5 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 15 décembre 2012
4 mars 2011 à 13:27
Merci à tous pour votre soutien.

Les requêtes s'effectuent correctement mais j'obtiens après leurs traitements cette fichue erreur d'exception liée à libmysql.dll

le code de ma fonction n'est pas sorcier pourtant

----------------------------------------------------------------------

Function EXEC_REQUETE(Rqx : AnsiString; alert:boolean) : boolean;
// On exécute la requête SQL. Renvoie True si OK
// Le résultat est dans MyRES.
begin
EXEC_REQUETE := false;
mysql_free_result(MyRES); // Libération des ressources utilisées
try
if mysql_real_query(MySQL, pChar(Rqx), length(Rqx)) = 0 then EXEC_REQUETE := true
else
begin
ERR_SQL := mysql_error(MySQL);
if alert then MessageDlg('Erreur dans la requête [' + ERR_SQL + ']', mtInformation,[mbOK],0);
end;

finally
MyRES := mysql_use_result(MySQL);
MyROW := mysql_fetch_row(MyRES);
end;
end;
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
4 mars 2011 à 14:26
Bonjour,

C'est les lignes dans la clause Finally qui génére le message. Tu ne peux pas faire mysql_use_result pour un Update.
Moi, j'ai une focntion d'éxécution pour les Select (qui retourne un résultat) et une fonction pour exécuter les Update ou Insert.

Jean
0
Rejoignez-nous