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

foudetous 22 Messages postés mardi 25 mars 2008Date d'inscription 17 juin 2009 Dernière intervention - 19 déc. 2008 à 22:18 - Dernière réponse :  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'
 
Afficher la suite 

8 réponses

Répondre au sujet
foudetous 22 Messages postés mardi 25 mars 2008Date d'inscription 17 juin 2009 Dernière intervention - 19 déc. 2008 à 23:05
+3
Utile
<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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de foudetous
Utilisateur anonyme - 19 déc. 2008 à 22:35
0
Utile
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
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 19 déc. 2008 à 22:39
0
Utile
Oupsss la boulette désolé :  num:=StrToInt(form3.adoquery1.FieldByName('num').AsString)
Commenter la réponse de Utilisateur anonyme
foudetous 22 Messages postés mardi 25 mars 2008Date d'inscription 17 juin 2009 Dernière intervention - 19 déc. 2008 à 22:49
0
Utile
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 .
Commenter la réponse de foudetous
Utilisateur anonyme - 19 déc. 2008 à 22:56
0
Utile
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
Commenter la réponse de Utilisateur anonyme
foudetous 22 Messages postés mardi 25 mars 2008Date d'inscription 17 juin 2009 Dernière intervention - 19 déc. 2008 à 22:59
0
Utile
mais ça plante sans le insert je vous dit qu'avec le premier ça plante
Commenter la réponse de foudetous
Utilisateur anonyme - 19 déc. 2008 à 23:13
0
Utile

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.