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

codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 28 janv. 2008 à 14:17 - Dernière réponse : codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention
- 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

cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 janv. 2008 à 18:41
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 28 janv. 2008 à 15:21
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 28 janv. 2008 à 16:28
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 28 janv. 2008 à 16:56
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 janv. 2008 à 10:03
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 10:15
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 10:24
0
Utile
Bonjour,

Autre chose:

{ DM.TBQuery1.RowCount } ne renvoie rien?

Je me trompe?
Cordialement
Commenter la réponse de codial
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 janv. 2008 à 11:50
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 11:54
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 janv. 2008 à 12:08
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 12:14
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 12:33
0
Utile
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
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 janv. 2008 à 12:59
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 janv. 2008 à 18:35
0
Utile
cantador
Commenter la réponse de cs_cantador
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 31 janv. 2008 à 08:37
0
Utile
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.