Récupérer le numéro du dernier enregistrement [Résolu]

Signaler
Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009
-
 Utilisateur anonyme -
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'
 

8 réponses

Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009

<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

Boujour et bon courage.

Salut,

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

Première procédure :

num:=form3.adoquery1.FieldByName('num').AsInteger;

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

Oupsss la boulette désolé :  num:=StrToInt(form3.adoquery1.FieldByName('num').AsString)
Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009

bjr Fracky,
en faite num est integer, mais ce que je ne comprend pas c qu'il signale msg erreur rien avec le premier code avant l'insertion .

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
Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009

mais ça plante sans le insert je vous dit qu'avec le premier ça plante


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à).

Ah ben voila : Ado Création a encore fait des siennes. Quel coquin celui là .