foudetous
Messages postés20Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention17 juin 2009
-
19 déc. 2008 à 22:18
Utilisateur anonyme -
19 déc. 2008 à 23:14
et bien voila mon code source delphi :
form3.ADOQuery1.SQL.clear;
form3.adoquery1.sql.add('Select max(numc)as num from clients ');
form3.adoquery1.open;
num:=form3.adoquery1.FieldByName('num').AsInteger;
form3.ADOQuery1.close;
incre:=num+1; form3.Label5.Caption:=inttostr(incre);
sachant que clients est une table de 4 champs: et comme je ajouter à chauque un clients j'ai besoin du numéro du dernier enregistrement pour ajouter ce code:
adoquery1.SQL.Clear;
adoquery1.SQL.add('insert into clients (numc,nomc,prenomc,telc)values ('+quotedstr(inttostr(incre))+', '+quotedstr(edit1.Text)+', '+quotedstr(edit2.Text)+','+quotedstr(edit3.Text)+')');
adoquery1.ExecSQL;
adoquery1.close;
mais avec le premier code il me signal cette erreur:
classe d'exception EDatabaseError avec le message 'Valeur Connection ou Connection String manquante'
foudetous
Messages postés20Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention17 juin 2009 19 déc. 2008 à 23:05
<strike>
</strike>oups j'ai trouvé, dslé la connection avec le adoconnection n'était pas établie et ça marche trés bien , j'apprécie beaucoup votre aide.
merci beaucoup
Je suis pas un expert en BDD mais il y a un soucis dans ton code
Seconde procédure :
adoquery1.SQL.add('insert into clients
(numc,nomc,prenomc,telc)values ('+quotedstr(inttostr(incre))+',
'+quotedstr(edit1.Text)+',
'+quotedstr(edit2.Text)+','+quotedstr(edit3.Text)+')');
Incre est du typer Integer mais tu l'enregistre dans ta base en le transtypant en string. Donc Incre est une string dans ta base
Ici tu essayes de récupérer le contenu du champ Num qui est un string en tant qu'entier (AsInteger) : il y a donc une méga sucette dans l'histoire.
num:=StrToInt(form3.adoquery1.FieldByName('num').AsInteger) devrait coller je pense
Tu as donc déclaré ton champs Incre en tant qu'entier quand tu as monté ta base.
Cependant quand tu fais dans la premiere procédure :
Adoquery1.SQL.add('insert into clients (numc,nomc,prenomc,telc)values ('+quotedstr(inttostr(incre))+', '+quotedstr(edit1.Text)+', '+quotedstr(edit2.Text)+','+quotedstr(edit3.Text)+')');
Tu essayes d'ajouter un string ( IntToStr(Incre) transforme initialement Incre en String) et evidemment ca plante car ta valeur doit etre un entier : Du reste tu as ce message d'erreur "'Valeur Connection ou Connection String manquante'". Tu dois donc ajouter Incre et non IntToStr(Incre) dans ta base
Hé
ho ho
hé, t'es un cas difficile en divination, je suis tout défréchie et puis la beuh à Cari elle fait plus d'effet : Donc laisse moi me concentrer .
Bon alors pour résumer et faire vite : il ya une grosse couille et t'es dans la merde : ca te vas ? Maintenant qu'on a bien positionné le probleme on va pouvoir avancer.
Dans le 2 tu met quotedstr(inttostr(incre)) donc tu insères une string
.Dans le 1 tu met num:=StrToInt(form3.adoquery1.FieldByName('num').AsInteger) donc là tu demandes à récupérer un entier.
Donc grosso modo il y a un truc qui colle pas : soit Incre est une string alors le 1 plante, soit Incre est un entier et alors c'est le 2 qui plante. Donc si c'est le 1 qui plante c'est que Incre a été déclaré dans ta base en tant que string et non en tant qu'entier : A toi de vérifier (Au pire essaye les 2 cas et regarde ce que cela donne et tu verras que le probleme vient de là).