Générer une clé alphanumérique

Résolu
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 28 janv. 2008 à 14:17
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 31 janv. 2008 à 08:37
Bonjour à tous,


je cherche comment générer une clé alphanumérique.
J'ai une table clients avec CLICOD  et CLINOM.
Quand je saisi le nom dans un edit (ou dbedit je ne sais pas encore) j'aimerais arriver à générer une clé du type:


Saisi nom TOTO ALAIN
Clé générée: TOTOAL0008


C'est à dire prendre les 6 premiers caractères du nom et  4 chiffres s'affichant dès la saisie de la première lettre du nom.
Ces 4 chiffres s'incrémentant en fonction des 6 premier caractères existant


Par exemple:
S'il existe déja TOTOAL0008 le suivant devra être TOTOAL0009


J'espère avoir été assez clair.


Si quelqu'un peut me dépanner.


D'avance merci.


Bien cordialement


Codial

15 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 18:41
Oui, c'est normal, pour un champ incrémental, si un numéro saute, on ne peut pas le récupérer pour des raisons de sécurité.
Ce n'est pas forcément ce que tu veux..

Est-ce si important que tu n'es pas de trou dans ta numérotation ?
Un jour ou l'autre, tu seras peut-être amené à supprimer un enregistrement ce qui te feras aussi un trou..

Il faut que tu réfléchisses un peu à cet aspect avant de poursuivre ...................................................
.......................................................................................................................

cantador
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
28 janv. 2008 à 15:21
UserCode := UpperCase(copy(Nom, 1, Max(4, Length(Nom))) + copy(Prenom, 1, Max(2,Length(Prenom))); { = TOTO+AL }

>> requette SQL : 'SELECT * WHERE Code LIKE  `'+UserCode+'%`'; { Chercher tout les TOTOAL* }
>> lire Count de la requete (nombre d'element trouvé ?)

ElemCount := { sqltruc.RowCount } + 1;UserCode :format(UserCode+'%.4d',[ElemCount]); { TOTOAL+000n }


0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
28 janv. 2008 à 16:28
Bonjour,

merci pour cette réponse rapide.

Je teste mais j'ai un soucis avec la fonction max, elle n'exista pas en Delphi.

Cordialement
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
28 janv. 2008 à 16:56
Bonsoir,

j'ai créer les functions Min et Max. En fait c'est la fonction Min qu'il faut utiliser pour mon besoin.
Ceci dit il faudrait que j'arrive à gérer les espaces car le nom et le prénom sont saisie dans le même Edit.

TOTO ALAIN doit égaler TOTOAL
Tu sais faire?

Cordialement
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 10:03
Je supprimerai le blanc et du coup le reste est simple :

procedure TForm1.Button1Click(Sender: TObject);
var
Str, Extr : string;
begin
 Str := 'TOTO ALAIN';
 Extr := copy(AnsiReplaceStr(Str, ' ',''),1,6);
 ShowMessage(Extr);
end;

Pour la numérotation, je créerai un champ incrémental automatique comme çà on évacue, le souci du + 1..
et ensuite, il suffit de faire un champ calculé (non stocké)

cantador
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 10:15
Bonjour,


merci pour cette réponse, mais pourrais tu expliciter cette partie:


"Pour la numérotation, je créerai un champ incrémental automatique comme çà on évacue, le souci du + 1..
et ensuite, il suffit de faire un champ calculé (non stocké)"

D'avance merci

Cordialement


 
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 10:24
Bonjour,

Autre chose:

{ DM.TBQuery1.RowCount } ne renvoie rien?

Je me trompe?
Cordialement
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 11:50
Un champ auto-incrémental se crée dans une table..
(je suppose que tu utilises BDE + paradox..)

Ta concanétation:
  doit d'afficher à l'écran dans un Edit (et non un DBEdit)
Edit1.text := Extr + IntToStr(ChampIncr));
pour connaître le nombre d'enregistrements renvoyés par une requête stockée dans un TQuery :
Query1.RecordCount

Bien sûr, il y a d'autres possibilités...

cantador
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 11:54
Bonjour,

Extr := copy(AnsiReplaceStr(Str, ' ',''),1,6);

Sur cette ligne j'ai un message d'erreur sur "
Caractère incorrect dans le fichier d'entrée:""($22)


Cordialement


 
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 12:08
je teste tous mes codes avant de les poster :




Copy(AnsiReplaceStr(Str, ' ',''),1,6);
Sous D7.





N'oublie pas le StrUtils dans les uses...

Si tu as encore un souci, merci de posterTOUTle code.

cantador
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 12:14
Bonjour,

En fait j'utilise une BDD Firebird.
J'ai effectivement céer un champ AUTO mais celui ci ne se met à jour qu'à la validation.

Cordialement
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 12:33
Bonjour
 en ce moment je teste et ma procedure est la même que la tienne:


procedure TfrmClients.edNomExit(Sender: TObject);
var Str, Extr:string;
begin
Str:=edNom.Text;
Extr:=Copy(AnsiReplaceStr(Str,'',"),1,6);
Showmessage(Extr);
end;

J'ai bien mis StrUtils dans les uses.


Mais j'ai ce message d'erreur sur le "


Cordialement
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 janv. 2008 à 12:59
Bonjour

Pour l'erreur c'est bon

Extr:=Copy(AnsiReplaceStr(Str,'',"),1,6);

Sur les premiers '' j'avais oublié de mettre un espace.

Excuse!

Par ailleurs, j'ai créer un champ AUTO pour créer ma structure AAAA0001
le problème est que si une saisie est annulée le numéro AUTO est quand même pris en compte et donc la prochaine saisie va sauter un numéro.

Cordialement
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 janv. 2008 à 18:35
cantador
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
31 janv. 2008 à 08:37
Bonjour,

oui tu as raison, je m'étais fait cette remarque;
Pour ma clé alphanumérique j'ai donc pris la valeur du numéro auto.

Cordialement

Encore merci à tous pour vos réponse;
0
Rejoignez-nous