Générer une clé alphanumérique [Résolu]

Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
- - Dernière réponse : codial
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
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
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
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 }


Commenter la réponse de f0xi
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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
Commenter la réponse de codial
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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
Commenter la réponse de codial
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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


 
Commenter la réponse de codial
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
Bonjour,

Autre chose:

{ DM.TBQuery1.RowCount } ne renvoie rien?

Je me trompe?
Cordialement
Commenter la réponse de codial
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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


 
Commenter la réponse de codial
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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
Commenter la réponse de codial
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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
Commenter la réponse de codial
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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
Commenter la réponse de codial
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
cantador
Commenter la réponse de cs_cantador
Messages postés
270
Date d'inscription
mercredi 14 avril 2004
Dernière intervention
5 mai 2015
0
Merci
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;
Commenter la réponse de codial

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.