Incrémenter un numéro de série [Résolu]

Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
- - Dernière réponse : 76julien
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
- 7 févr. 2008 à 08:21
   Salut tout le monde, j'ai fait du DELPHI dans mon jeune temps mais je ne sais pas comment peut-on incrémenter un numéro de série contenant des lettres et des chiffres. Je veux juste incrémenter les chiffres...les lettres ne changent pas..

Mon numéro de série est du type CD20080001
et je voudrais incrémenté du type
CD20080002
CD20080003
CD20080004
**********
**********
CD20080101

etc....

   En effet je veux juste incrémenter les quatres derniers chiffres en rouge...
Merci de me laisser un petit message ou cas ou vous avez une solution...
a+
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
446
Date d'inscription
vendredi 7 novembre 2003
Dernière intervention
8 octobre 2008
3
Merci
bonjour,
function Copy(S;Index,Count:Integer):string;

Dom

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de dominique.stock
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
3
Merci
function StrSlice(const S: string; index: integer; count: integer) : string;
var
strlen : integer;
offset : integer;
begin
strlen := length(S) + 1;
{ start from right side }
  if 0 > index then
    offset := index + strlen
  else
    offset := index;
{ end from right side }
  if 1 > count then
    Result := Copy(S, offset, count + strlen - offset)
  else
    Result := Copy(S, offset, count)
end;

Exactement dominique, je viens à l'instant de trouver une solution qui se trouve ci-dessus :::: voila ou j'ai trouvé la source ::

www.delphifr.com/codes/STRINGTOOLS-FONCTIONS-MANIPULATION-CHAINES-CARACTERES_19697.aspxhttp://www.delphifr.com/codes/STRINGTOOLS-FONCTIONS-MANIPULATION-CHAINES-CARACTERES_19697.aspx

A vous de jouer et merci pour votre aide qui m'a aiguillé !!
A+

Dire « Merci » 3

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

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de 76julien
Messages postés
97
Date d'inscription
vendredi 12 octobre 2007
Dernière intervention
20 novembre 2009
0
Merci
En imaginant que nombre soit ta variable de comptage...

-------------------------------------------------------------------
var nombre : integer;

NumSerie := 'CD2008' + FormatFloat("0000", nombre) ;
nombre := nombre + 1 ;

-------------------------------------------------------------------
Commenter la réponse de BernieNoel68
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
type
  pSerialNum = ^TSerialNum;
  TSerialNum = record
    A : char;
    B : char;
    C : word;
    D : word;
  end;
  TSerialString = string[10];

function SerialMake(const cA, cB: char; const wC, wD: word): TSerialNum;
begin
  result.A := cA;
  result.B := cB;
  result.C := wC;
  result.D := wD;
end;

procedure SerialIncD(var Serial: TSerialNum; const i: word = 1);
begin
  inc(Serial.D, i);
end;

function SerialToStr(const Serial: TSerialNum): TSerialString;
begin
  with Serial do
    result := A + B + format('%.4d%4d',[C,D]);
end;

function StrToSerial(const SerialStr : TSerialString): TSerialNum;
begin
  result.A := SerialStr[1];
  result.B := SerialStr[2];

  result.C := word(IntToStr(
SerialStr[3]+
SerialStr[4]+
SerialStr[5]+
SerialStr[6]
)));

  result.D := word(IntToStr(
SerialStr[7]+
SerialStr[8]+
SerialStr[9]+
SerialStr[10]
)));


end;

function CheckSerial(const Serial: TSerialNum): boolean;
begin
  with Serial do    result :(A 'C') and
              (B = 'D') and
              (C = 2008) and
              ((D >= 1) and (D <= 9999));
end;

 

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Commenter la réponse de f0xi
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
0
Merci
J'ai omis de préciser que mon dernier numéro de série était dans une base de données donc cela ressort de ma requete de la forme :

id := CD20080003

donc comment faire pour séparé "CD2008" de "0003" ?????

ensuite je ferai "0003+1".... et le tour est joué mais personne ne connais une fonction pour couper une chaine en deux la ou l'on veut????
Commenter la réponse de 76julien
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Attention aux accès concurrentiels...

cantador
Commenter la réponse de cs_cantador
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
0
Merci
pourquoi attention aux acces concurrentiels???
moi sa marche c'est quoi le souci???
Commenter la réponse de 76julien
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
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Trois clients en réseaux déclenchent en même temps une insertion.
Examine les résultats..
cantador
Commenter la réponse de cs_cantador
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
0
Merci
Oui je vois ce que tu veux dire le numéro de commande sera le même pour les trois commande...
C'est vrai que sa peut poser des problèmes, mais dans mon cas c'est en général le même utilisateur qui entrera les commandes donc pas possibilité de doublons...

Mais par curiosité et pour ma culture générale, j'aimerai bien connaitre la facon de gérer ce genre de probleme...
Si tu peux me poster un message concernant ceci sa serait sympa...

merci d'avance cantador
a+
Commenter la réponse de 76julien
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Si tu as un seul utilisateur, le problème est réglé..
et la situation est durable alors même pas besoin de serveur..tu colles le programme et la base le tout sur un seul poste.
Le Multi-Utilisateurs en réseau, c'est bcp + chaud..
tout dépend aussi du type de SGBD...
Il y a tellement de cas de figures possibles qu'il est difficile de tout décrire..


Mais juste par exemple dans ton cas :


En principe, on gérer les clés primaires par des champs auto-incrémentals
du coup, on se débarrasse de la gestion du + 1 et aussi des conflits de partage
(ce qui n'est pas rien)


C'est la machine qui fait tout.


Mais évidemement cela n'empêche nullement d'afficher un champ calculé qui
pourrait être une concaténation du style 'CD2008' + IntToStr(NumIncrement).


Mais tu as choisi de gérer une clé composite et dans le cas d'une mise en réseau.
il faudra attendre la fin de chaque validation avant d'en attaquer une autre.
Autrement dit il faudra faire une boucle d'attente qu'on peut traiter à la manière rude:

  ok := 0;
  cree := false;
  while True do
  begin
    try
      DataModule.Query1.Post;
      cree := true;
      break;
    except
      if ok = 3 then
      begin
        showmessage('Vous ne pouvez pas créer de fiche pour l'' instant, essayez plus tard.');
        DataModule.Query1.Cancel;
        break;
      end;
      ok := ok + 1;
    end;
  end;

@+
cantador
Commenter la réponse de cs_cantador
Messages postés
59
Date d'inscription
lundi 14 janvier 2008
Dernière intervention
4 juin 2010
0
Merci
Salut cantador, 
   Merci pour l'info, je ne vais pas me servir de sa de suite mais je conserve la source pour plus tard (sa peut toujours servir ...) !!
   Encore merci !!
   @+ pour un nouveau pbm qui sait !!
Commenter la réponse de 76julien

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.