Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 25/11/2011, 08h53   #1
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Requete ajout de type périodicité

Bonjour tout le monde,
J'ai une table manifestation, qui comporte les champs suivants :
Id_Manifestation --> clé primaire
Id_Activité--> Clé étrangère qui va chercher une activité
Date_Debut--> Champs date de type 21/11/2011
Heure_Début--> Champs date/heure de type 09:30
Heure_Fin--> champs date/heure de type 10:30

Je souhaite créer une requête de type ajout de manière à ajouter des enregistrements à ma table Manifestation en définissant une périodicité de type : Date_Début + 7 jours car l'activité en question a lieu tous les lundis.
Après j'aimerais crée une autre requête mais cette fois de suppression afin de supprimer tous les enregistrements de ma table Manifestation dont les dates correspondent aux vacances scolaires.
Est ce-faisable ?
Pourriez vous me donner quelques pistes ?
Cordialement.
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 09h37   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Si tu veux une périodicité sur 1 semaine, admettons que tu es sur ton formulaire manifestation tes champs :

Id_Manifestation ,
Id_Activité,
Date_Debut,
Heure_Début,
Heure_Fin,

Tu peux mettre à jour ta table T_Manifestation source de ton formulaire, pour les 3 prochaines semaines, en appuyant sur le bouton "Commande1", avec le code :

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
Private Sub Commande1_Click()
Dim rst As DAO.Recordset
Dim DateJ As Date
 
Set rst = CurrentDb.OpenRecordset("T_Manifestation", dbOpenDynaset)
 
   If Not IsNull(Me!Date_Debut) Then
 
      DateJ = CDate(Me!Date_Debut)
 
      For i = 1 To 3 ' Prochaines semaines
 
      rst.AddNew ' Ajout des enrg.
 
      rst!Id_Activité = Me!Id_Activité
      rst!Date_Debut = DateJ + 7 ' Plus 7 jours
      rst!Heure_Debut = Me!Heure_Debut
      rst!Heure_Fin = Me!Heure_Fin
 
      rst.Update
 
      DateJ = DateJ + 7
 
      Next i
 
   End If
 
rst.Close
Set rst = Nothing
 
End Sub
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 09h50   #3
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Formulaire....

User,
Merci pour votre réactivité.
Une petite question pourquoi passer par un formulaire au lieu d'une requête ?
Cordialement
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 10h33   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Oui c'est possible avec une requête, mais tout dépend sur quelle période de temps tu souhaites générer ces manifestations:

Car si tu souhaites générer sur 3 semaines par exemple, il va bien falloir que tu passes par une boucle VBA et que tu exécute 3 fois ta requête pour:

Manifestation à 1 semaine (Date_Debut+7)
à 2 semaines (Date_Debut+14)
à 3 semaine ( Date_Debut+21)

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 10h39   #5
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Formulair

Merci pour tous ces renseignements.
Peut on appliquer une stratégie au code de manière à créer des enregistrements uniquement durant les périodes scolaires, c'est à dire que durant la période des vacances scolaires il n'y ai pas d'enregistrement :
J'avais l'idée de créer une requête "suppression" des enregistrements comprises dans la période souhaitée.
Qu'en pensez vous ?
Cordialement.
Julius
*-*
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 10h56   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Tes vacances,congés...tu peux les enregistrer dans une table "T_Conges"(avec les champs DateDebut et DateFin) par exemple, puis tu fais une fonction :

Code :
1
2
3
4
5
Public Function EstConge(Jour As Date) As Boolean
 
EstConge = Not IsNull(DLookup("DateDebut", "T_Conges", "(DateDebut<=" & CLng(Jour) & ") and (DateFin>=" & CLng(Jour) & ")"))
 
End Function
Qui teste si 1 jour est congé (compris entre datedebut et datefin dans la table T_Conges).

Puis, après dans le code précédent tu testes si (DateJ +7) est 1 jour de congé:

Si Non tu ajoutes l'enregistrement...

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
Private Sub Commande1_Click()
Dim rst As DAO.Recordset
Dim DateJ As Date
 
Set rst = CurrentDb.OpenRecordset("T_Manifestation", dbOpenDynaset)
 
   If Not IsNull(Me!Date_Debut) Then
 
      DateJ = CDate(Me!Date_Debut)
 
      For i = 1 To 3 ' Prochaines semaines
 
         If Not EstConge(DateJ+7) Then ' Si pas congé
 
         rst.AddNew ' Ajout des enrg.
 
         rst!Id_Activité = Me!Id_Activité
         rst!Date_Debut = DateJ + 7 ' Plus 7 jours
         rst!Heure_Debut = Me!Heure_Debut
         rst!Heure_Fin = Me!Heure_Fin
 
         rst.Update
 
         end if
 
      DateJ = DateJ + 7
 
      Next i
 
   End If
 
rst.Close
Set rst = Nothing
 
End Sub
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2011, 11h05   #7
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Autres choses

J'abuse sur les demandes d'aide mais je suis vraiment bloqué.
Dans ma table T_Manifestation initialement indiqué ci-dessus, j'ai donc mes enregistrements. Cependant j'ai une autre table T_Permanence_Gardien avec les champs :
Id_Permanence_Gardien --> Clé primaire
Id_Gardien --> clé étrangère qui correspond au nom du gardien
Date_Debut_Permanence --> champs date/heure de type 21/11/2011
Date_Heure_Debut_Permanence --> champs date/heure de type 08:00
Date_Fin_Permanence -->champs date/heure de type 27/11/2011
Date_Heure_Fin_Permanence --> champs date/heure de type 23:59

Je souhaiterai avoir les renseignements suivants :
Qui est de permanence pour telle manifestation ?
Comment liée mes T_Manifestation et T_Permanence_Gardien ?
Merci.
Cordialement.
Julius (petit fonctionnaire débutant)
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h16   #8
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Il faut faire une requête sélection basée sur la table permanences gardien et qui renvoie le nom du gardien (L'Id gardien) pour lequel le jour de la manifestation est compris entre le début et la fin de ses gardes.
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h34   #9
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Excusez moi de vous déranger encore une fois, mais je ne comprend pas ce que je dois faire avec :
Tes vacances,congés...tu peux les enregistrer dans une table "T_Conges"(avec les champs DateDebut et DateFin) par exemple, puis tu fais une fonction :

Ou dois je insérer le code ? --> macro ?
Cordialement.
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 12h15   #10
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Tu crées une table T_Congés avec les champs

DateDebut de type Date
DateFin de type Date

Tu crées un formulaire basé sur cette table T_Conges, et c'est à partir de ce formulaire que tu vas enregistrer les Date de début et de fin des vacances...

Ensuite tu crées un module indépendant (onglet module->Nouveau...) dans lequel tu copie la fonction :

Code :
1
2
3
4
5
Public Function EstConge(Jour As Date) As Boolean
 
EstConge = Not IsNull(DLookup("DateDebut", "T_Conges", "(DateDebut<=" & CLng(Jour) & ") and (DateFin>=" & CLng(Jour) & ")"))
 
End Function

...

Ensuite tu peux utiliser cette fonction dans l'autre code...
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 16h09   #11
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Manque quelque chose dans le code

Re,
Lorsque j'associe le code ci-dessous au bouton :


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
Private Sub Commande1_Click()
Dim rst As DAO.Recordset
Dim DateJ As Date
 
Set rst = CurrentDb.OpenRecordset("T_Manifestation", dbOpenDynaset)
 
   If Not IsNull(Me!Date_Debut) Then
 
      DateJ = CDate(Me!Date_Debut)
 
      For i = 1 To 3 ' Prochaines semaines
 
         If Not EstConge(DateJ+7) Then ' Si pas congé
 
         rst.AddNew ' Ajout des enrg.
 
         rst!Id_Activité = Me!Id_Activité
         rst!Date_Debut = DateJ + 7 ' Plus 7 jours
         rst!Heure_Debut = Me!Heure_Debut
         rst!Heure_Fin = Me!Heure_Fin
 
      rst.Update
 
      DateJ = DateJ + 7
 
      Next i
 
   End If
 
rst.Close
Set rst = Nothing
 
End Sub
J'ai une erreur "Erreur de compilation : Next sans For" et il m'affiche le numéro de ligne comportant l'erreur.
Pouvez vous m'aider ?
Cordialement.
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 16h35   #12
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Trouvé solution mais présence d'un autre problème

J'ai trouvé la solution, après lecture du code il manquait un "end if".
Par contre dans ma table T_Conges : j'ai 3 enregistrements
Id_Conges Date_Debut_Conges Date_Fin_Conges
1 19/12/2011 02/01/2012
2 19/02/2012 04/03/2012
3 15/04/2012 29/04/2012
J'ai modifié le code du formulaire tel que :
For i = 1 to 32' prochaine semaines.
Seulement les enregistrements s'arrêtent au 12/12/2011 car le code de ma Table T_Conges indique qu'il ne faut pas enregistrer d'enregistrement durant la période 19/12/2011 au 02/01/2012.
Comment modifié le code pour qu'il tienne compte des différentes périodes ?
Cordialement.
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 17h39   #13
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Peux-tu poster ton code en utilisant la balise de code ?

Tu n'as peut-être pas mis le end if au bon endroit

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 19h50   #14
Invité de passage
 
Julius Rubius
Inscription : octobre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Julius Rubius

Informations forums :
Inscription : octobre 2010
Messages : 10
Points : 0
Points : 0
Par défaut end if....

Ci joint le code utilisé

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
Private Sub Commande17_Click()
Dim rst As DAO.Recordset
Dim DateJ As Date
 
Set rst = CurrentDb.OpenRecordset("T_Occupation_Simple", dbOpenDynaset)
 
   If Not IsNull(Me!Date_Debut) Then
 
      DateJ = CDate(Me!Date_Debut)
 
      For i = 1 To 7 ' Prochaines semaines
 
         If Not EstConge(DateJ + 7) Then ' Si pas congé
 
         rst.AddNew ' Ajout des enrg.
 
         rst!Id_Manifestation = Me!Id_Manifestation
         rst!Date_Debut = DateJ + 7 ' Plus 7 jours
         rst!Heure_Debut = Me!Heure_Debut
         rst!Heure_Fin = Me!Heure_Fin
 
         rst.Update
 
         End If 
 
      DateJ = DateJ + 7
 
 
      Next i
 
 End If
 
rst.Close
Set rst = Nothing
End Sub
Cordialement.
Julius
julius870 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 20h24   #15
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

Regarde ton dernier message j'ai corrigé le code en plus d'avoir ajouté les balises de code (#) :

Le doit être avant , sinon la variable Datej ne s'incrémente plus

Sur ce bonne soirée

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User 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 17h55.


 
 
 
 
Partenaires

Hébergement Web