Récupérer le numéro du dernier enregistrement

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

8 réponses

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

Boujour et bon courage.
3
Utilisateur anonyme
19 déc. 2008 à 22:35
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
0
Utilisateur anonyme
19 déc. 2008 à 22:39
Oupsss la boulette désolé :  num:=StrToInt(form3.adoquery1.FieldByName('num').AsString)
0
foudetous
Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009

19 déc. 2008 à 22:49
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 .
0

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

Posez votre question
Utilisateur anonyme
19 déc. 2008 à 22:56
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
0
foudetous
Messages postés
20
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
17 juin 2009

19 déc. 2008 à 22:59
mais ça plante sans le insert je vous dit qu'avec le premier ça plante
0
Utilisateur anonyme
19 déc. 2008 à 23:13

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à).
0
Utilisateur anonyme
19 déc. 2008 à 23:14
Ah ben voila : Ado Création a encore fait des siennes. Quel coquin celui là .
0