Incrémentation

Fermé
EmilieRose - 24 févr. 2010 à 14:36
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 - 26 févr. 2010 à 10:48
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

angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
24 févr. 2010 à 15:50
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
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
D'ailleurs ne serait-ce pas plutôt dans "form_load" ? ^_^
0
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
25 févr. 2010 à 09:00
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
25 févr. 2010 à 15:30
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
Pour avoir un numéro à l'enregistrement que je conçois, je dois mettre mon code dans form_load ? :-/
0
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
25 févr. 2010 à 15:51
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
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
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
25 févr. 2010 à 16:01
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
Up :(
0
angelus1821 Messages postés 191 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 21 décembre 2014 16
26 févr. 2010 à 10:48
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