L0pez
Messages postés5Date d'inscriptionsamedi 15 décembre 2012StatutMembreDernière intervention15 décembre 2012
-
1 mars 2011 à 12:13
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDerniè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)';
L0pez
Messages postés5Date d'inscriptionsamedi 15 décembre 2012StatutMembreDernière intervention15 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'
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;
jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 20141 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.