Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/07/2007, 16h42   #1
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
Par défaut Créer deux conditions

Bonjour

j'aimerais créer deux conditions dans une table access:

J'ai un champ "numauto" qui s'incrémente et un champ date qui affiche l'heure et la date du jour

- Je souhaite que le nbre d'entrées dans ma base soit limité à 50/jour et si ça dépasse 50 que le champ date affiche automatiquement le jour suivant

- Je souhaite que la sasie dans ma base s'arrète tous les jours à 15h30 au dela il faut que le champ date affiche la date du jour suivant

Je voudrais au moins un début de réponse la dessus. Que feriez vous ? une macro ? ou autre ?

D'avance merci de votre aide
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 20h44   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 482
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 482
Points : 7 577
Points : 7 577
Je ferais la fonction suivante pour la valeur du champ date.

Attention ce code suppose que tu es mono-utilisateur !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public function CalculerDate() as date
  dim result as date
 
  dim nbEnr as long
  nbEnr=DCount("MonChampDate","MaTable","[MonChampDate]=#" & Date() & "#"
 
  if nbEnr > 50 then
      result=DateAdd("d",1,date())
    else
 
      if time() > timeserial(15,30,00) then
          result=DateAdd("d",1,date())
        else
          result=date()
      end if
 
  end if
 
end function
à mettre dans ton from de saisie, sur BeforeInsert ou lorsque tu es sur un nouvelle enr, ou encore comme valeur par défaut (DefaultValue=CalcuelerDate())

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 09h13   #3
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
Bonjour

Tout d'abord un grand merci pour la rapidité de la réponse

Quand tu dis à mettre dans ton from de saisie, ça veut dire quoi ?
Moi en fait j'ai créé ma table , un formulaire et une page web pour que les utilisateurs saisissent à partir de cette page.
Autre problème je ne suis pas mono utilisateur, cette page sera accessible via le réseau par plusieurs utilisateurs

Encore merci pour votre aide prècieuse
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h00   #4
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
Bonjour à tous

pouvez vous m'aider pour réaliser les 2 conditions.

Est ce possible ? sachant que les utilisateurs vont saisir dans la table via une page d'accès au données créée avec access

Merci pour votre aide
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h25   #5
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Du moment qu'il y a plusieurs utilisateurs, c'est plutot compliqué, rien ne garantit que deux insertions se feront en même temps
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 20h00   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 482
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 482
Points : 7 577
Points : 7 577
Citation:
Envoyé par ju3979
Bonjour

Tout d'abord un grand merci pour la rapidité de la réponse

Quand tu dis à mettre dans ton from de saisie, ça veut dire quoi ?
Moi en fait j'ai créé ma table , un formulaire et une page web pour que les utilisateurs saisissent à partir de cette page.
Autre problème je ne suis pas mono utilisateur, cette page sera accessible via le réseau par plusieurs utilisateurs

Encore merci pour votre aide prècieuse
OK, ça change pas mal de chose.

Il va falloir que tu fasse une fonction qui realise une exclusion mutuelle (c-a-d'un moyen de s'assurer qu'il n'y a qu'une seule personne à la fois) et je n'ai aucune idée comment le mettre en oeuvre à partir du Web.

Avant de mettre des efforts là dedans, cette fonctionnalité est-elle absolument indispensable ?

Peut-être peux-tu la gérer à posteriori, c-a-d que une fois toutes tes commandes rentrées ex vers minuit, tu leur attribue une date calculée avec la fonction ci-dessus.

Je mets tout même ici un exemple de code qui gère l'exclusion mutuelle pour le calcul d'un numéro de dossier.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
Public Sub CalculerNouveauNumDossier(prmClefPeriode As Long, prmTypeFacturation As Variant)
    'La création du compteur doit être fait lors de la création de la période.
 
    If Not MODE_DEBUG Then
        On Error GoTo Err_CalculerNouveauNumDossier
    End If
 
    Dim db As Database: Set db = CurrentDb
    Dim ClefTypeFacturation As Long
    Dim CodeTypeFacturation As String
 
    Select Case VarType(prmTypeFacturation)
        Case vbString
            ClefTypeFacturation = LireClefTypeFacturation((prmTypeFacturation))
            CodeTypeFacturation = prmTypeFacturation
        Case vbLong, vbInteger, vbDouble
            ClefTypeFacturation = prmTypeFacturation
            CodeTypeFacturation = LireCodeTypeFacturation((prmTypeFacturation))
        Case Else
            Error 5
    End Select
 
    'Lire l'année du compteur
    Dim Annee As Integer
    Dim rPeriode As Recordset: Set rPeriode = db.OpenRecordset("Periode", dbOpenDynaset)
    Call rPeriode.FindFirst("[Clef]=" & prmClefPeriode)
 
    If Not rPeriode.NoMatch Then
            Annee = Year(rPeriode![DateDebut])
        Else
            Error 3709: 'Clef non trouvée
    End If
 
    rPeriode.Close: Set rPeriode = Nothing
 
    m_Annee = Annee
 
    'Lire le code court
    Dim rTypeFacturation As Recordset: Set rTypeFacturation = db.OpenRecordset("TypeFacturation", dbOpenDynaset)
    rTypeFacturation.FindFirst ("[Clef]=" & ClefTypeFacturation)
 
    If Not rTypeFacturation.NoMatch Then
            m_Code = rTypeFacturation![CodeCourt]
        Else
            Error 3709: 'Clef non trouvée
    End If
 
    rTypeFacturation.Close: Set rTypeFacturation = Nothing
 
    'Calculer le nouveau numéro séquentiel
    Dim rCompteur As Recordset: Set rCompteur = db.OpenRecordset("Compteur", dbOpenDynaset)
    Call rCompteur.FindFirst("[ClefTypeFacturation]=" & ClefTypeFacturation & " and [Annee]=" & Annee)
 
    Dim nouveauNumSeq As Long
    If Not rCompteur.NoMatch() Then
 
RepriseSurVerouillage:
 
            rCompteur.Edit
            nouveauNumSeq = rCompteur![DernierNumSeq] + 1
            rCompteur![DernierNumSeq] = nouveauNumSeq
            rCompteur.Update
        Else
            Error 5: 'Clef non trouvée
    End If
 
    rCompteur.Close: Set rCompteur = Nothing
    db.Close: Set db = Nothing
 
    m_NumSequence = nouveauNumSeq
 
Exit_CalculerNouveauNumDossier:
    Exit Sub
 
Err_CalculerNouveauNumDossier:
    Select Case Err.Number
        Case 3046, 3158, 3186, 3187, 3188, 3202, 3218, 3260, 3330, 3624
            'Boucle tant que le compteur est vérouillé
            Resume RepriseSurVerouillage
 
        Case Else
            Call AfficherMessErrStandard(Err)
            Resume Exit_CalculerNouveauNumDossier
    End Select
 
End Sub
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h12.


 
 
 
 
Partenaires

Hébergement Web