Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : compteur [ Base de données / ADO & DAO ] (jolicoeur79)

lundi 15 janvier 2007 à 02:23:52 | compteur

jolicoeur79

salut a tous
je suis d'entrain de developper une application vb6 + access j'ai creer un champs qui  s'appelle "n° facture" de type numerique mon probleme je veux une fonction qui permet a ce numero de s'intialiser a "1" chaque mois ou annee
et merci.

lundi 15 janvier 2007 à 08:25:35 | Re : compteur

jmfmarques

Membre Club
Si tu gères tes rajouts par une application VB ou VBA : une méthode :

Inscrire dans un fichier texte ou dans la base de registre un drapeau "mois en cours/numéro", par exemple et :
- à chaque inscription : lire ce drapeau et :
    - si le mois en cours est celui du drapeau : donner à ton champ la valeur numéro + 1
    - si le mois en cours est différent de celui du drapeau : donner à ton champ la valeur 1
    - mettre systématiquement à jour ton drapeau en y inscrivant "mois en cours/numero attribué"

Celà te permettra d'éviter un champ supplémentaire dans ta base (mois) et d'aller systématiquement voir quel était la dernière facture.


Il y a d'autres méthodes, mais elles seront toutes plus gourmandes en octets inscrits sur ton disque.

lundi 15 janvier 2007 à 09:50:29 | Re : compteur

Exploreur

Membre Club

Salut Jolicoeur79,
J'ai eu la même chose à faire pour une de mes sources(Gestion Expéditions), il me fallait un nouveau numéro de bl à chaque changement d'année ex:
En 2006 mon Bl était N6/001
En 2007 mon BL devenait N7/001
En faite j'ai un champ(année) supplémentaire dans ma table BL, et à chaque fois que je créé un bl, j'inscrit dans ce champ l'année en cours "2007".
quand je change d'année je vais comparer l'année de mon dernier numéro de bl avec l'année en cours. Si cela est pareil je continu en "2007", si cela est différent je prend donc la nouvelle année "2008" pour faire une nouveau BL "N8/001"

Voici un bout de code de ma source pour te montrer comment j'ai procédé..
Bon je suis sûr que ce n'est pas trop optimisé, mais pour te faire une idée de comment procéder. J'espère que cela pourra t'aider.

'On récupère le dernier N° de bl et année pour attribuer un bl par année
  'Positionement sur le dernier enregistrement de la base
   resultatADO.MoveLast
  
  'Déclare variables pour acquisitions info
   Dim Rannée, Rdate
   If Not IsNull(resultatADO!bl) Then rrésulta = (resultatADO!bl)
   If Not IsNull(resultatADO!année) Then Rannée = (resultatADO!année)
   rrésulta = Mid(rrésulta, 4)
   'Rdate = Mid(Date, 7)
   Rdate = Year(Date) 'Récupère la date systeme(année) et la met en long(ex:2006 au lieu de 06)
  
  'Condition pour les années supérieur à 2009
      If Rdate > "2009" Then
         Rdate = Mid(Rdate, 3)
         GoTo suite
      End If
 
  'On compare les dates en vu du nouveau N° de BL
   If Rannée = Rdate Then
      Rdate = Mid(Rdate, 4)
      GoTo suite
    Else
      Rdate = Mid(Rdate, 4)
      GoTo suite
    End If
   
suite:

  'On reconstitut et attribu un nouveau N° de BL
   'Condition pour les chiffres < à 9
       If rrésulta < 9 Then
          rrésulta = rrésulta + 1
          rrésulta = "00" & rrésulta
          rrésulta = "N" & Rdate & "/" & rrésulta
          Text4(0).text = rrésulta
          GoTo suite1
       End If
      
      'Condition pour les chiffres >= 10 et < 100
       If rrésulta >= 9 And rrésulta < 100 Or rrésulta = "9" Then
          rrésulta = rrésulta + 1
          rrésulta = "0" & rrésulta
          rrésulta = "N" & Rdate & "/" & rrésulta
          Text4(0).text = rrésulta
          GoTo suite1
       End If
      
      'Condition pour les chiffres >= 100 et < 1000
       If rrésulta >= 99 Or rrésulta = "99" Then
          rrésulta = rrésulta + 1
          rrésulta = "N" & Rdate & "/" & rrésulta
          Text4(0).text = rrésulta
          GoTo suite1
       End If
      
suite1:

   'Bl par année
   
    Rannée = Rannée Like année_encours
                'Condition
                 If Rannée = False Then
                 Dim modi
                 modi = Mid(Text4(0).text, 4)
                 modi = "N" & Rdate & "/" & "001"
                 Text4(0).text = modi
                 End If
   
   'Init de mes varaibles
    rrésulta = ""
    Rdate = ""
    Rannée = ""

A+
Exploreur


lundi 15 janvier 2007 à 11:05:48 | Re : compteur

jmfmarques

Membre Club
Bonjour Exploreur,

C'est bien, mais ...
- Celà te fait (comme je le disais) un champ supplémentaire qui viendra gonfler ta base de données.
- il te faut (comme je l'ai dit et que tu le dis également) aller à chaque fois à la pêche du dernier enregistrement pour le lire

lundi 15 janvier 2007 à 11:18:21 | Re : compteur

Exploreur

Membre Club

Bonjour Jmfmarques,
Effectivement, disont que j'ai fait cela suivant comment je voyait la chose, ce n'est pas la meilleure solution j'en convient avec toi...Je pensais faire le truc avec un fichier texte (comme tu le dis), c'est vrai que cela soulagerai le code..et serai plus pratique.
Cela m'intérèsserai de connaître les autres méthodes dont tu parles...
A+
Exploreur....au plaisir

 


lundi 15 janvier 2007 à 11:27:30 | Re : compteur

jmfmarques

Membre Club

Une autre méthode ?
une 2ème table composée uniquement d'un champ mois et d'un champ numéro et qui n'est mise à jour que lorsque nécessaire.
Il suffit alors d'ouvrir cette table systématiquement, tant pour y lire que pour écrire, à chaque nouvel enregistrement.

De cette façon, comme avec un fichier texte, on n'utilise qu'un seul enregistrement de ces 2 champs et pas un nombre multiple de celui des enregistrements, comme ce serait le cas si l'on enregistrait ces deux données dans la table des articles eux-mêmes, d'une part et, d'autre part, il n'est pas besoin de parcourir toute une table (puisqu'il n'y a qu'un seul article dans cette table complémentaire)


lundi 15 janvier 2007 à 11:35:03 | Re : compteur

Exploreur

Membre Club
Ben...voui, je n'avais pas vu la chose de cette façon, plus pratique éffectivement...
Quelque fois on a les choses devant son nez(moi) et on ne voit pas la simplicité même......Merci de l'explication.
A+
Exploreur

lundi 15 janvier 2007 à 18:10:09 | Re : compteur

caramelmou

Il vaut mieux aller cherche le dernier numero créé pour le mois en cours dans la table même, afin d'éviter des erreurs (si plusieurs tables, ou fichier texte externe : risque de problème en multi utilisateurs)  Ex de code pour Jolicoeur

la table facture contient un champ n_facture (champ type texte clef primaire)
ou les numero de factures sont sous la forme YY/MM/XXXX  (an/mois/numero)
code pour ajouter une facture émise à la date date_fac
   
    Dim monrs As New ADODB.Recordset, cnn As New ADODB.Connection
    Dim date_fac As Date, strCritere As String, strSQL As String
   
    date_fac = Date ' pour l'exemple la date du jour
    strCritere = Format(date_fac, "YY/MM") & "/"
    strSQL = "SELECT * from FACTURE ORDER BY n_facture DESC"
   
    Set cnn = CurrentProject.Connection
    monrs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
    monrs.Find "n_facture LIKE '" & strCritere & "*'", 0, adSearchForward
    If monrs.EOF Then
        new_facture = strCritere & Format(1, "00000")
    Else
        new_facture = strCritere & Format(Val(Mid(monrs!n_facture, Len(strCritere) + 1)) + 1, "00000")
    End If
    monrs.AddNew
    monrs!n_facture = new_facture
    ' ....'les autres champs de la facture a ajouter
    monrs.Update
    monrs.Close


Dr.T

lundi 15 janvier 2007 à 21:04:49 | Re : compteur

jmfmarques

Membre Club

Bonjour caramelmou...

Multi utilisateurs, hein...?
Et en laissant l'ouverture accessible à tous au même moment, hein ?

Dis-voir un peu, toi : tu dois en trouver surement quelques-un beaucoup plus sévères, de problèmes.... en agissant de la sorte !!!


mardi 16 janvier 2007 à 14:55:33 | Re : compteur

caramelmou

..?
dans le code le champ n_facture est une clef primaire. Il faut en effet écrire une gestion d'erreur lors de l'update au cas ou plusieurs utilisateurs tentent de créer simultanement une facture (si erreur = doublon, on peut recommencer ou abandonner)

Mais toute facon, en réseau il faudra gérer le verrouillage que l'on utilise un fichier externe ou une table supplementaire:  cf  msdn   [ Lien ]  Comment implémenter les compteurs multi-utilisateur personnalisés dans Jet 4.0 et ADO 2.1

Il me semblait que ma solution était plus simple... maintenant si quelqu'un veut mettre un code complet avec verrrouillage et gestion d'erreur... ;-)

Dr.T


1 2

Cette discussion est classé dans : compteur


Répondre à ce message

Sujets en rapport avec ce message

Compteur Internet [ par Raf ] Les freewares ou sharewares de compteur de communications sur internet ne répondant pas à mes souhaits, je souhaite essayer de devellopper moi-même mo compteur [ par sebanba ] Peut on sous vb5 créer une variable ds un programme mais qui ne se vide pas a la fin du programme afin de créer un compteur pour faire un nombre limit compteur [ par robert ] j'aimerai savoir comment créer avec visual basic un compteur c'est à dire comment faire varier un chiffre de 1 par exemple chaque fois que l'on clique Winsock/API/compteur internet [ par styleto ] bon je cherche a soivoir quel est l'apiou le code qui permaitrai de fair un compteur internet non pas pour les heur mai pour savoir combien d'octet ou Compteur [ par aoncoquin ] J'ai une source assez intéressante mais ça me fait drôle de la publier ; ce que je sous-entend, c'est qu'en fait , il m'a fallut un bon temps de réell Compteur ? [ par néo ] Bjr, je débute en program VBA sous WORD 97.J'ai crée un petit logiciel et je voudrais y inclure un compteur, pour qu'a chaque redémarrage de celui il Comment effectuer la lecture de chaque élément d'un tableau [ par emarck ] Bonsoir, J'ai déclarer un tableau sans spécifier sa longeur et je fais un Redim preserve afin de le réajuster à chaque fois que j'ajoute un élémen Probleme avec UserControl [ par BRAHIM ] Bonjour,S.v.p je suis vraiment coincé c'est l'ultime etape pour bouclermon projet. J'ai creer un composant activex avec UserControl comportantune nouv


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.