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

76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 4 févr. 2008 à 17:21 - Dernière réponse : 76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention
- 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 

12 réponses

Répondre au sujet
dominique.stock 446 Messages postés vendredi 7 novembre 2003Date d'inscription 8 octobre 2008 Dernière intervention - 5 févr. 2008 à 09:52
+3
Utile
bonjour,
function Copy(S;Index,Count:Integer):string;

Dom
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dominique.stock
76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 5 févr. 2008 à 09:57
+3
Utile
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+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de 76julien
BernieNoel68 97 Messages postés vendredi 12 octobre 2007Date d'inscription 20 novembre 2009 Dernière intervention - 4 févr. 2008 à 17:41
0
Utile
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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 4 févr. 2008 à 19:31
0
Utile
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
76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 5 févr. 2008 à 08:32
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 5 févr. 2008 à 17:37
0
Utile
Attention aux accès concurrentiels...

cantador
Commenter la réponse de cs_cantador
76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 6 févr. 2008 à 08:42
0
Utile
pourquoi attention aux acces concurrentiels???
moi sa marche c'est quoi le souci???
Commenter la réponse de 76julien
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 6 févr. 2008 à 15:03
0
Utile
cantador
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 6 févr. 2008 à 15:04
0
Utile
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
76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 6 févr. 2008 à 16:30
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 6 févr. 2008 à 17:53
0
Utile
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
76julien 59 Messages postés lundi 14 janvier 2008Date d'inscription 4 juin 2010 Dernière intervention - 7 févr. 2008 à 08:21
0
Utile
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.