Réinitialisation d'un champ auto incrément
Résolu/Fermé
iris1984
Messages postés
5
Date d'inscription
jeudi 21 août 2014
Statut
Membre
Dernière intervention
25 septembre 2014
-
21 août 2014 à 11:09
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 - 25 sept. 2014 à 17:30
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 - 25 sept. 2014 à 17:30
A voir également:
- Sql réinitialiser auto_increment
- Reinitialiser pc - Guide
- Reinitialiser pc sans mdp - Guide
- Réinitialiser manette ps4 - Guide
- Réinitialiser chromecast - Guide
- Réinitialiser ps4 - Guide
12 réponses
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
2
23 sept. 2014 à 05:18
23 sept. 2014 à 05:18
Salut,
ma function est testée, ...
Et dans ton code, il est où le SQL pour chercher le dernier record créé ?
Bonne journée.
solilog
ma function est testée, ...
Et dans ton code, il est où le SQL pour chercher le dernier record créé ?
Bonne journée.
solilog
CptRomaiin
Messages postés
315
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
58
21 août 2014 à 12:20
21 août 2014 à 12:20
Salut,
Tu peux nous montrer le morceau de code que tu utilises ?
Tu peux nous montrer le morceau de code que tu utilises ?
iris1984
Messages postés
5
Date d'inscription
jeudi 21 août 2014
Statut
Membre
Dernière intervention
25 septembre 2014
21 août 2014 à 12:35
21 août 2014 à 12:35
voici mon code:
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOTable1.FieldByName('Nummalade').Value:=inttostr(ADOTable1.RecordCount+1)+'/'+FormatDatetime('YYYY',now);
ADOTable1.FieldByName('Datedentree').Value:=strtodate(formatdatetime('DD/MM/YYYY',now));
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOTable1.FieldByName('Nummalade').Value:=inttostr(ADOTable1.RecordCount+1)+'/'+FormatDatetime('YYYY',now);
ADOTable1.FieldByName('Datedentree').Value:=strtodate(formatdatetime('DD/MM/YYYY',now));
end;
CptRomaiin
Messages postés
315
Date d'inscription
mercredi 23 octobre 2013
Statut
Membre
Dernière intervention
28 avril 2016
58
Modifié par CptRomaiin le 21/08/2014 à 12:53
Modifié par CptRomaiin le 21/08/2014 à 12:53
Ça fait longtemps que j'ai pas fait de delphi mais tu ne peux pas faire un truc comme ça ?
Et ensuite tu remet le champ à 1 en updatant la base.
valeur = ADOTable1.RecordCount+1; if valeur > 12 then valeur = 1; ADOTable1.FieldByName('Nummalade').Value:=inttostr(valeur)+'/'+FormatDatetime('YYYY',now);
Et ensuite tu remet le champ à 1 en updatant la base.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
iris1984
Messages postés
5
Date d'inscription
jeudi 21 août 2014
Statut
Membre
Dernière intervention
25 septembre 2014
24 août 2014 à 09:59
24 août 2014 à 09:59
salut
j'ai tout essayé et ça marche toujour pas; y'a pas une autre solution pour que le numéro se réinitialise à chaque changement de l'année (condition sur FormatDatetime('YYYY',now))
merci
j'ai tout essayé et ça marche toujour pas; y'a pas une autre solution pour que le numéro se réinitialise à chaque changement de l'année (condition sur FormatDatetime('YYYY',now))
merci
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
2
8 sept. 2014 à 13:44
8 sept. 2014 à 13:44
Salut,
avant de te répondre (et ca va peut-être t'aider a réfléchir et trouver la solution), 3 questions :
- le champs a construire est-il une clé dans la table ?
- est-il possible de mettre l'année en premier ex 2014/25
- peut-on construire le champs avec des 0 dans le nombre ex: 2014/0025, 2014/0026, pour avoir une longueur fixe ?
Ca t'aide un peu ?
solilog.
avant de te répondre (et ca va peut-être t'aider a réfléchir et trouver la solution), 3 questions :
- le champs a construire est-il une clé dans la table ?
- est-il possible de mettre l'année en premier ex 2014/25
- peut-on construire le champs avec des 0 dans le nombre ex: 2014/0025, 2014/0026, pour avoir une longueur fixe ?
Ca t'aide un peu ?
solilog.
iris1984
Messages postés
5
Date d'inscription
jeudi 21 août 2014
Statut
Membre
Dernière intervention
25 septembre 2014
Modifié par iris1984 le 8/09/2014 à 16:19
Modifié par iris1984 le 8/09/2014 à 16:19
salut,
Oui pour les 3 questions et c'est une clé primaire
iris.
Oui pour les 3 questions et c'est une clé primaire
iris.
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
2
8 sept. 2014 à 18:37
8 sept. 2014 à 18:37
Bonsoir,
tu ajoute sur ta form un tQuery renommé ici qry1 avec le SQL ci dessous.
Ca devrait aller.
solilog
--
tu ajoute sur ta form un tQuery renommé ici qry1 avec le SQL ci dessous.
// retourne une clé au format YYYY/000000
// composée de w_annee / w_num
function TForm1.get_NewKey : string;
var n_annee : string; // nouvelle annee
a_Num, // ancien num
Err : integer; // Si ancienne cle invalide
a_Key : variant; // ancienne cle (complete)
// (variant car peut être null si table vide)
// utilise qry1 (SQL) 'SELECT MAX(JRNOPE) FROM OPE'
begin
n_annee := formatdatetime('YYYY', now);
qry1.open; // cherche cle precedente
a_Key := qry1.fields[0].value;
qry1.close;
if (a_Key = NULL) // NULL table vide
or (copy(a_Key, 1, 4)<>n_annee) // Nlle annee ou clé invalide
then a_Num := 0
else begin
val(copy(a_Key, 6, 6), a_Num, Err); // cherche num precedent
// mieux que strtoint, evite try
if Err<>0 // si Err cle invalide
then a_Num := 0;
end;
result := n_annee + format('/%6.6d', [a_Num+1]);
end;
Ca devrait aller.
solilog
--
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
2
15 sept. 2014 à 07:07
15 sept. 2014 à 07:07
Salut Iris1984,
Tu l'as ta réponse, l'as-tu testée ?
solilog
Tu l'as ta réponse, l'as-tu testée ?
solilog
salut solilog,
Oui j'ai testé ton code et j'ai fais quelques modification dessus, mais ça marche toujour pas.
le problème maintenant est que le numéro ne s'incrémente pas; il est toujour initialisé à 1 suivi de l'année choisi (2014/000001; 2015/000001; 2016/000001;...)
voici le code:
procedure TForm2.Button1Click(Sender: TObject);
var n_annee,result : string;
a_Num,Err : integer;
a_Key : variant;
begin
ADOTable1.Append;
n_annee := formatdatetime('YYYY', now);
a_Key := ADOTable1.fields[0].value;
if (a_Key = NULL)or (copy(a_Key, 1, 4)<>n_annee)then
a_Num := 0
else
begin
val(copy(a_Key, 6, 6), a_Num, Err);
if Err<>0 then
a_Num := 0;
end;
result := n_annee + format('/%6.6d', [a_Num+1]);
ADOTable1.FieldValues['Numero']:=result;
end;
cordialement,
p.s: J'étais vraiment malade ces dérniers jours c'est pour cela que je ne t'es pas répondu très tôt.
Oui j'ai testé ton code et j'ai fais quelques modification dessus, mais ça marche toujour pas.
le problème maintenant est que le numéro ne s'incrémente pas; il est toujour initialisé à 1 suivi de l'année choisi (2014/000001; 2015/000001; 2016/000001;...)
voici le code:
procedure TForm2.Button1Click(Sender: TObject);
var n_annee,result : string;
a_Num,Err : integer;
a_Key : variant;
begin
ADOTable1.Append;
n_annee := formatdatetime('YYYY', now);
a_Key := ADOTable1.fields[0].value;
if (a_Key = NULL)or (copy(a_Key, 1, 4)<>n_annee)then
a_Num := 0
else
begin
val(copy(a_Key, 6, 6), a_Num, Err);
if Err<>0 then
a_Num := 0;
end;
result := n_annee + format('/%6.6d', [a_Num+1]);
ADOTable1.FieldValues['Numero']:=result;
end;
cordialement,
p.s: J'étais vraiment malade ces dérniers jours c'est pour cela que je ne t'es pas répondu très tôt.
iris1984
Messages postés
5
Date d'inscription
jeudi 21 août 2014
Statut
Membre
Dernière intervention
25 septembre 2014
25 sept. 2014 à 16:34
25 sept. 2014 à 16:34
salut,
Merci beaucoup solilog ça a marché
Iris
Merci beaucoup solilog ça a marché
Iris
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
2
25 sept. 2014 à 17:30
25 sept. 2014 à 17:30
Salut,
Alors tu peux fermer ton post.
solilog
Alors tu peux fermer ton post.
solilog