IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Générer un numero automatiquement


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut Générer un numero automatiquement
    Bonjour à tous,
    Je suis sur un projet mais un problème me bloque depuis quelques jours et j'ai cherché sur internet mais en vain.Au fait,j'ai une table procès dans laquelle j'ai un champs de type varchar nommé "LibelleProces" dont la forme est : "CC-15-030-AAAA". Le problème les utilisateurs veulent que ce numéro soit automatique sachant que le "15" s'incrémente en fonction de l'année c'est-à-dire en 2016 ça va passer à "16" et ainsi de suite mais le "031" s'incrémente à chaque procès.Si quelqu'un sait comment je dois m'y prendre merci de me guider.

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    La comme ça je pense à plusieurs possibilités :

    Tu récupère la dernière string générée en base
    soit tu split, tu parse en int tu fait un +1 et tu reconstruit la chaine.
    soit avec des regexp ça doit pouvoir se faire aussi.

    Sinon à l'aide de ta base de données : tu crée une séquence en base pour gérer la valeur de la partie incrémentale.

  3. #3
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Citation Envoyé par Lady Voir le message
    Tu récupère la dernière string générée en base
    Possible si tu as un seul utilisateur, si tu en as deux, tu cours tout droit au doublon !


    Sinon à l'aide de ta base de données : tu crée une séquence en base pour gérer la valeur de la partie incrémentale.
    Ca par contre c'est une très bonne idée.

    Reste à savoir si la séquence doit automatiquement être remise à 0 à chaque changement d'année (et en espérant qu'on n'ai jamais plus de 9999 procès dans une année)

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par Lady Voir le message
    Sinon à l'aide de ta base de données : tu crée une séquence en base pour gérer la valeur de la partie incrémentale.
    C'est la meilleure solution

    Cependant, toutes les bases de données ne supportent pas la séquence (SQL Server par exemple).
    Si c'est le cas alors pour être très strict sur cette clé primaire, il faudra créer le numéro ET l'insertion dans la table "Procès" dans une seule transaction.

    @Kasko : peux-tu nous dire de quelle base de données il s'agit (MySql, Oracle, SQL Server, ...) ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Merci pour vos réponse.J'utilise MYSQL.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    D'après le peu que je sais sur MySQL, cette base n'aurait pas de vrai système de séquence.
    Il semble que chaque programmeur y va de son système de contournement pour faire "comme Oracle".

    Du coup, la solution n°1 de Lady semble être la plus simple
    à condition de fiabiliser l'insertion en la plaçant dans une transaction.
    (Naturellement si un expert MySql a une meilleure solution, surtout qu'il n'hésite pas à poster !)

    Cela donnerait quelque chose du genre :
    1) récupération du dernier numéro avec une instrution SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(LibelleProces) As DernierNumero FROM PROCES
    2) on sépare les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] tab = dernierNumero.split("-");
    3) on incrémente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nouveauNumero = Integer.parse(tab[2]) + 1;
    (on met à jour l'année au besoin)
    et on reconstitue le LibelleProces
    4) on ouvre une transaction pour insérer l'ensemble LibelleProces + autres données de la table

    5) on gère le problème de doublon si la transaction échoue (peu probable car on a 999 insertions au maximum par an soit 3 ou 4 par jour !)

    @kasko : le mieux est que tu testes tout cela et tu postes à nouveau dans ce fil de discussion si tu rencontres des difficultés.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    D'accord et surtout merci.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Lady Voir le message
    Sinon à l'aide de ta base de données : tu crée une séquence en base pour gérer la valeur de la partie incrémentale.
    A condition d'accepter les trous. Si l'exigence est que chaque numéro soit unique et qu'il n'y aie pas de trou, il n'y a pas beaucoup de possibilité: il faut crée un service unique de génération de ces numéro et tout le monde doit l'utiliser. Avec le problème de savoir comment gérer le rollback....

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Mouis ....

    Si c'était une base SQL Server, j'aurai fait un trigger qui crée le numéro au moment de l'insertion.
    Cela a l'avantage d'être transactionnel donc aucun risque de se marcher sur les pieds.

    C'est peut-être possible en MySql.
    Il faudrait que Kasko sache créer un trigger dans MySql ou qu'il fasse appel à quelqu'un ...
    Peut-être sur le forum MySql ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le trigger se déclenchant à l'insertion, pas au commit, ça reste inadapté si le client refuse les "trous". En même temps c'est presque impossible d'avoir un système sans trous, transactionnel et multi users...

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    le trigger se déclenchant à l'insertion, pas au commit, ça reste inadapté si le client refuse les "trous". En même temps c'est presque impossible d'avoir un système sans trous, transactionnel et multi users...
    Ben pas forcément, le trigger peut se déclencher après l'insertion, dans ce cas, il faudra tester si l'attribut est null ou pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TRIGGER numerotation_automatique AFTER INSERT ON laTable ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] generer un numero de bon automatiquement
    Par mosaique dans le forum WinDev
    Réponses: 9
    Dernier message: 11/02/2011, 16h11
  2. Agrandissement du Numero automatique
    Par valery17 dans le forum Access
    Réponses: 11
    Dernier message: 11/05/2006, 12h58
  3. [Info] Générer des numéros de licence
    Par nico2280 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 24/08/2005, 15h35
  4. Generer et incrementer automatiquement le clé primaire d'un
    Par ravelo dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2004, 20h12
  5. generer un numero auto a chaque insertion
    Par julio84 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/07/2003, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo