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 21/02/2011, 09h37   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Par défaut Historique Collectivité propriétaire Usine

Bonjour,
Je dois revoir une base access sur les productions d’eau des collectivités :
USINE(id, lib, Col#…)
ANNEE(id)
MOIS(id)
ASS_PRODUCTION (mois#, annee#, usine#, volume)
COLLECTIVITE(id, lib…)

Une requête me permet de connaître le volume produit par collectivité : somme des volumes produits pour l’ensemble des usines dont la collectivité est propriétaire
Seulement on assiste de plus en plus à des fusions entre collectivités exemple
Avant 2008 PetiteColl Propriétaire USINE P
GrandeCOLL Propriétaire USINE Q
Après 2008 PetiteColl n’existe plus et fusionne avec GrandeColl qui devient propriétaire de USINE P.
Sans même qu’il y ait fusion entre collectivité, il est aussi possible qu’une collectivité rétrocède ses usines à une autre collectivité.
Je pense qu’il est nécessaire d’avoir une table de relation entre COLLECTIVITE_USINE_ANNEE. Seulement c’est contraignant, beaucoup d’objets et à compléter tous les ans. Je pensais mettre une date de début et/ou date de fin plutôt. Mais j’ai peur que la requête pour trouver les productions de chaque collectivité se complique.
Qu’en pensez-vous ?
Merci
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 11h37   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonjour,

Nana35 revient pour de nouvelles aventures...

Je propose dans un premier temps:

USINE(idUsine, NomUsine,...., DateDernièreMAJCollectivité, #idCollectivitéActuelle)

HISTO_USINE(#idUsine, DateDebut, DateFin, #idCollectiviteHisto)

je mets un lien vers une ancienne discussion sur le même thème (ici il s'agit de produits dont on veut conserver l'historique des "TRT", à adapter à tes usines dont tu veux conserver l'historique des collectivités):
http://www.developpez.net/forums/d97...n/#post5503843

à voir si ça convient...

à +
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h18   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Citation:
Nana35 revient pour de nouvelles aventures...
C'est vrai que je me lance dans des trucs et dans des explications...

En tous les cas, ça m'a l'air pas mal. Je teste et je te redis au plus vite.
Merci
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h26   #4
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Bonjour,
J'ai fait ce qu'il fallait.
Mais il va falloir penser à un second temps! Désolée.

Je ne vois pas trop à quoi me sert le champ DateDernièreMAJ dans mes requêtes. C'est juste à titre d'info? Là, j'ai affecté la date du 01/01/2011 pour toutes les usines avec la collectivité actuelle.

Autrement il faut que j'utilise la Table
Citation:
ASS_PRODUCTION (mois#, annee#, usine#, volume)
qui contient les volumes afin d'attribuer les volumes d'eau produit aux collectivités en tenant compte de l'historique. Et là ???
On doit pouvoir faire correspondre date_début et date_fin avec ASS_PRODUCTION.annee

Besoin d'un coup de pouce!
Merci
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 20h32   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonsoir,

Code :
1
2
3
4
5
HISTO_USINE :
idUsine      	  DateDebut	DateFin	        idCollectivite
1		01/01/2010	31/06/2010	2
1		01/07/2010	31/12/2010	3
…
Code :
1
2
3
USINE:
idUsine	...   DateMAJ	 idCollectiviteEnCours
   1	      01/01/2011         4
Au 01/01/2011 l'usine n°1 appartient à la collectivité n°4 (après avoir été sous les collectivités n°2 et n°3 en 2010).

Supposons que l'usine n°1 passe sous la collectivité n°5 au 01/02/2011:
Code :
1
2
3
4
5
6
HISTO_USINE :
idUsine      	  DateDebut	DateFin	        idCollectivite
1		01/01/2010	31/06/2010	2
1		01/07/2010	31/12/2010	3
1		01/01/2011	31/01/2011	4
…
Code :
1
2
3
USINE:
idUsine	...   DateMAJ	 idCollectiviteEnCours
   1	      01/02/2011         5
DateMAJ est donc la date depuis le dernier changement de collectivité.

Dans le lien de mon message précédent, je propose une requête qui devrait permettre de retrouver la collectivité d'une usine à une date précise.
Tu devrais l'inclure dans une fonction VBA.

Je pense que tu auras également besoin de la fonction VBA, DateSerial pour reconstituer une date à partir de tes champs [Mois] et [Annee]:

DateSerial([Annee], [Mois],1)
retournera la date correspondant au 1er jour du mois et de l'année.

Note qu'une méthode moins élégante (question de goût) mais beaucoup plus simple pourrait consister à reprendre le champ idCollectivite dans ASS_PRODUCTION:
ASS_PRODUCTION (mois#, annee#, usine#, idCollectivite#, volume)

On re-précise chaque mois de chaque année la collectivité de l'usine (même s'il n'y a aucun changement de collectivité).
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 16h17   #6
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Merci
Très bien expliqué.
La méthode moins élégante, j'y pensais et je voulais l'éviter.
mais bon du coup ça complque les requêtes. Et les fonctions VBA c'est pas mon truc.
Pour DateSerial voilà ce que j'ai fait mais ça ne fonctionne pas.
Syntaxe pas valide
Code :
1
2
3
Public Function CreationDate(AnneeChamp As Integer, MoisChamp As Integer) As Date
CreationDate = DateSerial(AnneeChamp, MoisChamp, 1)
End Function
et dans la requête avec la Table ASS_PRODUCTION qui appelle cette fonction j'ai mis:
DateProduction: CreationDate([ANNEEid],[MOISid])
Peut être pb déclaration, pb type (mes deux champ sont pourtant numériques)
A suivre donc...
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 18h02   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Voici ce que j'ai testé...

- Une requête paramétrée nommée R_Coll:

R_Coll:
Code sql :
1
2
3
4
5
6
7
8
9
10
11
PARAMETERS [LaDate?] DateTime, [Usine?] Long;
(
  SELECT idCollectiviteEnCours AS idCol FROM USINE
  WHERE idUsine=[Usine?] AND DateMAJCollectivite<=[LaDate?]
)
UNION ALL (
  SELECT idCollectiviteHisto AS idCol FROM HISTO_USINE
  WHERE idUsine=[Usine?]
       AND DateDebut<=[LaDate?]
       AND DateFin>=[LaDate?]
);
qui retourne la collectivité d'une usine donnée à une date donnée.

- Une fonction VBA GetCollectivite qui exploite la requête précédente:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function GetCollectivite(LaDate As Date, Usine As Long) As Long
Dim qdf As DAO.QueryDef
Dim rcs As DAO.Recordset
 
  Set qdf = CurrentDb.QueryDefs("R_Coll")
      qdf.Parameters("[LaDate?]") = LaDate
      qdf.Parameters("[Usine?]") = Usine
 
  Set rcs = qdf.OpenRecordset
 
  If Not rcs.EOF Then
        GetCollectivite = rcs.Fields(0)
    End If
 
  qdf.Close
  rcs.Close
  Set qdf = Nothing
  Set rcs = Nothing
 
End Function
- Une requête de sélection toute simple avec les assistants (à compléter avec les jointures ad hoc avec les autres tables):
Code sql :
1
2
3
4
5
6
7
SELECT 
ASS_PRODUCTION.MOIS, 
ASS_PRODUCTION.ANNEE, 
ASS_PRODUCTION.Volume, 
ASS_PRODUCTION.idUsine, 
GetCollectivite(DateSerial([ANNEE], [MOIS],1), ASS_PRODUCTION.idUsine) AS NumCollectivite
FROM ASS_PRODUCTION;

à tester...
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h38   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 14
Points : 14
Bon bah c'est nickel !
Tu m'as bien maché le travail. Merci.
Fantastique
Nana35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h45.


 
 
 
 
Partenaires

Hébergement Web