Incrémentation

EmilieRose -  
angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un formulaire sur Access, je souhaite incrémenté le numéro de facture (qui donc dans un champ) sans mettre la clé primaire en "automatique".

Merci d'avance.

12 réponses

  1. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    salut
    plusieurs possibilités s'offrent à toi :
    tu met un bouton qui incremente l'id de la facture de 1 , quand tu cliques dessus, le numero dans ta zone de texte correspondant à l'id de la facture augmente mais faut faire attention de ne pas appuyé plusieurs fois de suite dessus ^

    sinon le mieux c'est que supposons que tu as un bouton pour enregistré ta facture, à chaque fois que tu cliques dessus, tu enregsitres les données dans ta base, tu réinitialises ton formulaire et l'identifiant s'incrémente de 1

    cela depend du contexte en fait, tu peux aussi l'incrémenter quand tu ouvres ton formulaire facture , pour cela au niveau code :
    - tu fais une requete qui compte le nombre de facture
    - tu enregistres le résultat obtenu dans une variable par ex NomVariable
    - ensuite tu fais NomVariable= NomVariable+1
    - et tu assignes à ton identifiant la valeur de NomVariable , puis tu l'affiche dans la zone de texte prévue à cette effet

    en clair, à chaque fois que tu ouvres ton formulaire, sa te compte le nombre de facture et l'identifiant de la facture en cours sera egal aux nombre de facture + 1

    je pense que tu devrais pouvoir y arriver comme cela, n'hesite pas au besoin, pour plus de précisions
    bon courage :)
    0
  2. EmilieRose
     
    Merci pour ta réponse détailler Angelus, c'est tout sympa comme tout.

    J'ai écris ceci :

    Private Sub T_facture_numfacture_BeforeUpdate(Cancel As Integer)
    Dim nomvariable As String

    nomvariable = "SELECT count(numfacture)FROM [FACTURE];"
    nomvariable = nomvariable + 1

    Me.T_facture_numfiche = nomvariable

    End Sub

    Cela ne fonctionne pas mais je dois bien y être presque, peux-tu encore m'aider stp :D
    0
  3. EmilieRose
     
    D'ailleurs ne serait-ce pas plutôt dans "form_load" ? ^_^
    0
  4. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    re , pas de soucis :)
    moi j'aurais vu les choses sous cette angle :
    oui c'est normal, tu declare nomVariable en tant que chaine , je te propose la chose suivante ( :

    on suppose que tu as deja declaré ta connection, tu as l'etat suivant :
    Private Sub T_facture_numfacture_BeforeUpdate(Cancel As Integer) 
    Dim nomvariable As String 
    
    nomvariable = "SELECT count(numfacture)FROM [FACTURE];" 
    
    
    nomvariable correspond a ta requete donc tu ne peux pas mettre  " nomvariable = nomvariable + 1 " 
    pour cela declare un integer  : dim Valeur as integer
    
    je te propose de declaré un recordset pour executé ta requete, pour cela commence par declaré un recordset au debut
    :
    dim Tonrecordset  as new adodb.recordset ( en supposant que tu es en ADO)
    ensuite tu recuperes le resultats de ta requete dans Valeur :
    Valeur = TonREcordset.recfields(0)
    
    tu incremente : Valeur = Valeur + 1
    ensuite tu dis que Valeur est egal à l'id de la fatcure 

    cela fait un petit moment que je n'ai pas pratiqué du access mais je penses que sa devrait allé mieux
    n'hésite pas s'il y a un quelconque souci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. EmilieRose
     
    Merci énormément Angelus :-*

    Si je vais aux précédant enregistrements, j'ai bien le numéro de la facture, mais sur l'enregistrement actuel que je conçois, c'est vide/blanc, il y aura un numéro de facture une fois que j'aurai valider mon formulaire ? Je ne peux pas l'avoir directement ?
    0
  7. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    re
    en fait tout le code se fait dans cette procedure :

        Private Sub T_facture_numfacture_BeforeUpdate(Cancel As Integer) 
    .

    supposons qu' initialement les champs sont vides, quand tu ouvres ton formulaire facture,
    tu remplis ta facture, puis tu cliques sur un bouton valider, qui enregistre ta facture.

    en partant de ce principe, tu peux rajouter dans ton " form_load " le code pour obtenir un nouvelle identifiant, comme cela , lorsque tu ouvriras ton formulaire, seul le champ correspondant à l'identifiant sera remplis ( car au chargement de la page :
      - tu auras compter le nombre d'enregistrement
       - tu l'auras assigner dans une variable, puis incrementer et tu l'aura assigner à l'identifiant
    il ne te restera plus qu'a remplir les autres valeur ...


    sinon autre solution :
    tu ouvres ton formulaire sur le dernier enregistrement par ex, supposons que tu fasses un bouton " nouveau "
    ce bouton dont le caption(texte sur le bouton) est " nouvelle facture " ( et tu met comme nom de ton bouton : btnEnvoyer)

    dans l'evenement " sur clic " tu aura un code dans ce style :

    private sub btnEnvoyer_click()
       si btnEnvoyer.caption = "nouvelle facture"  
        alors 
                 - effacer tout les champs, pour remplir de nouvelle valeur par la suite
                 ' tes instructions ....
            btnEnvoyer.caption = " valider" 
       fin si 
    
       si btnEnvoyer.Caption= " valider " alors
            ' tu met ton code pour enregistrer tes valeurs dans la base
          btnEnvoyer.caption=" nouvelle Facture"  
       fin si    
    
    end sub


    EN clair, quand tu clique sur ton bouton, tes zones de texte se vide pour laisser place aux nouvelles données, et le titre de ton bouton change en " valider "
    si tu re-cliques dessus et que le titre de ton bouton c'est " valider " alors sa t'enregistres tes nouvelles données dans la base
    et le titre de ton bouton redevient " nouvelle fatcure "
    0
  8. EmilieRose
     
    Pour avoir un numéro à l'enregistrement que je conçois, je dois mettre mon code dans form_load ? :-/
    0
  9. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    oui , en supposant que tu assignes un id à ta facture à l'ouverture du formulaire, mais il y a différentes façon de faire sa, cela dépend du contexte

    si tu fais des facture " à la chaine " , tu peux utiliser la methode que je t'es montré avec le bouton " nouvelle facture " qui devient " valider " et une fois cliquer sur "valider " tu enregistres les valeurs et ainsi de suite...

    si tu fais quelques choses d'autres avant , ensuite tu ouvres ton formulaires fatures pour etablir la facture, là oui tu peux assigner l'id au chargement

    ou la solution de faciliter lol, tu fais un petit bouton sympatique , qui sur clique :
    - tu va générer un nombre aléatoire ( voir fonction randomize )
    - tu assignes le nombre ainsi générer dans la zone de l'identifiant et le tour est joué

    sinon avec plus de précision sur le contexte de l'établissement de la facture, je pourrais peut etre y voir un peu plus clair, merci :)
    0
  10. EmilieRose
     
    J'ai donc supprimé la première procédure pour la mettre dans form_load, mais cela ne fonctionne plus.

    L'erreur est ici : Valeur = Tonrecordset.recfields(0)
    Méthode introuvable...
    0
  11. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    faut voir comment tu declares ton recordset, sinon je te dis sa demain ou peut etre dans la soirée si j'ai le temps , là je n'ai pu le temps
    n'hesite pas à me MP au besoin, bon courage
    0
  12. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    re ;)
    alors on à ceci :

      Valeur = Tonrecordset.recfields(0) 
            Méthode introuvable... 


    est tu en ADO ou DAO ?
    au début aussi il faut declaré ton recordset, si tu es en ADO , tu fais comme ceci :
    dim Tonrecordset as new adodb.recordset

    normalment il devrait le trouvé automatiquement quand tu tape la syntaxe

    sinon tu fais comme ceci :
    dim Tonrecordset as recordset

    une fois declaré il faut " l'ouvrir " le recordset, je penses que c'est comme suivant
      Tonrecordset.open (TaRequete )
          Tonrecordset.execute


    essaye de mettre déja cela
    0