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

Modélisation Discussion :

[Conception]Créer un numéro avec des caractere et des chiffres


Sujet :

Modélisation

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 123
    Points : 50
    Points
    50
    Par défaut [Conception]Créer un numéro avec des caractere et des chiffres
    Bonjour a tous,

    Je voudrais créer un numéro de ce type : "PR-07-" & numéro_automatique avec une taille quelconque.

    PR-07- est biensur fixe. Pour faire un numéro automatique j'ai ajouté un champ qui me créée automatiquement et m'incrémente ce champs. le pb c'est que je voudrais, lors de la sasie d'un nouvel enregistrement avoir la valeur de ce champ. Pour le moment il ne donne pas de numéro mais seulement la valeur "(numéro auto)".
    N' y a t'il pas moyen de récupérer ce numéro avant d'enregistrer?
    Hittenmitsulugi ryu!!

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    le (numéro auto) se crée dès que tu saisies des données dans la ligne.
    Pas à l'enregistrement de la ligne.

    je en comprends pas bien ton problème là

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je procéderais différement, sans numéro automatique :

    1 - Dans ta table un champ numérique qui commence à 1 (pas un num auto)
    2 - Dans un deuxième champ ton numéro complet : "PR-07 + ton numéro"

    Je procéderais de la maniéré suivante :

    1 - Lorsque je veux crée un enregistrement je récupére le dernier numéro (le plus grand) du champ donnant les numéros, grâce à l'instruction DMax
    2 - Dans le champ où il y'a le numéro "PR ...", je ferais une concaténation de : PR-07 et la valeur trouvé grâce à DMax +1, et ensuite je mettrais à jour le premier champ par DMax +1.

    Starec

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    euh ... starec, si jamais ca commence toujours par TR-07-, il n'a pas besoin de 2 colonnes, et ton idée du DMAX est une bonne idée.

    en fait, suivant ton idée, avec une 'tiote amélioration, ca donnerait une fonction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Function ProchainID() as string
        Dim vTemp as variant
        Const conNbZero as string="00000000000"
        Const conEnTete as string="TR-07-"
        vTemp=DMax("LeChampID","LaTable")
        if nz(vTemp,"")="" then
            ProchainID= conEnTete & format(1,conNbZero)
        else
            ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1)),conNbZero)
        end if
    End Function
    et il n'a plus qu'à utiliser la fonction...
    ce qui évite l'usage de 2 champs...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Maxence

    Oui, j'avais pas penser au Mid pour récupérer le numéro et l'affecter au prochain +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1)),conNbZero
    le +1 ne serait-il pas mieux là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete))+1),conNbZero)
    Starec

  6. #6
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    erf !

    en fait, il en faut 2 des "+1"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function ProchainID() as string
        Dim vTemp as variant
        Const conNbZero as string="00000000000"
        Const conEnTete as string="TR-07-"
        vTemp=DMax("LeChampID","LaTable")
        if nz(vTemp,"")="" then
            ProchainID= conEnTete & format(1,conNbZero)
        else
            ProchainID= conEnTete & format(Val(mid(vTemp,len(conEnTete)+1))+1,conNbZero)
        end if
    End Function

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 123
    Points : 50
    Points
    50
    Par défaut
    voila ce que j'ai fait ca fonction correctement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function ProchainID() As String
        Dim maxnum As Variant
        maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
        If Nz(maxnum, "") Then
            maxnum = 1
        Else
            maxnum = maxnum + 1
        End If
        ProchainID = "PR-07-" & maxnum
    End Function
    j'espere que je n'oubli rien ^^...
    Hittenmitsulugi ryu!!

  8. #8
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 123
    Points : 50
    Points
    50
    Par défaut
    En fait ma fonction marque qu s'il existe deja un enregistrement dans ma table.
    Quand la table est vide ca ne marche pas...
    Comment expliquer ca?
    Hittenmitsulugi ryu!!

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    Avant de lancer ton contrôle il faut tester ton DMax de la maniére suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function ProchainID() As String
        Dim maxnum As Variant
        If IsNull(DMax("non_champ", "nom_table")) then
              exit Function
        End If
    maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
        If Nz(maxnum, "") Then
            maxnum = 1
        Else
            maxnum = maxnum + 1
        End If
        ProchainID = "PR-07-" & maxnum
    End Function
    Les fonctions de domaine renvoient NULL si elles ne trouvent rien.

    Starec

  10. #10
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 123
    Points : 50
    Points
    50
    Par défaut
    Dans le cas ou DMax est null, je voudrais créer le premier numéro. Ce qui ne se fait pas dans ton code. Ton code crée un numéro que si la base contient un élément...
    Hittenmitsulugi ryu!!

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Petite adaptation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Function ProchainID() As String
        Dim maxnum As Variant
        If IsNull(DMax("non_champ", "nom_table")) then
             ProchainID = "PR-07-1" 
             exit Function
        End If
    maxnum = DMax("non_champ", "nom_table") //champs généré automatiquement
        If Nz(maxnum, "") Then
            maxnum = 1
        Else
            maxnum = maxnum + 1
        End If
        ProchainID = "PR-07-" & maxnum
    End Function
    A tester

    Starec

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2011, 16h57
  2. Réponses: 2
    Dernier message: 10/05/2011, 17h32
  3. Réponses: 7
    Dernier message: 04/09/2010, 12h51
  4. Réponses: 11
    Dernier message: 27/08/2008, 23h20
  5. [Conception] Créer une table avec php
    Par freezerhm dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/10/2006, 12h15

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