IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Mise à jour de données dans une table


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut Mise à jour de données dans une table
    Bonjour, voici mon problème :
    J'ai fait une BDD qui fonctionne bien avec les champs: Nom, Taux, Heures, Projet
    Exemple de données : Sylvain Gouin - 35$ - 18 heures - Projet 01
    Si le taux de cet employé change je voudrais que seulement les nouveaux enregistrements aient ce nouveau taux mais Access ajuste le taux dans tous les enregistrement, même les vieux ce qui n'est pas bon puisque les "anciens" enregistrement doivent rester au "vieux" taux. Le taux de 35$ équivaut au taux "Junior" je pourrais ajouter un nouveau taux nommé Junior2 avec le nouveau montant mais je vais me rammaser avec beaucoup trop de taux (Junior2, 3,4,5 etc...) puisqu'ils changent souvent!

    Merci pour votre aide afin de m'aider à regler ce problème!

  2. #2
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Je ne sais pas si cela te conviendra. Tu pourrais envisager de changer la valeur par défaut de ton taux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Taux_BeforeUpdate(Cancel As Integer)
       Me![Taux].DefaultValue = Me![Taux]
    End Sub

  3. #3
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    La, tu te fais une super table "T_TAUX" avec comme champs :
    - ID_TAUX
    - DESCRIPTION_TAUX
    - MONTANT_TAUX
    - DATE_ENTREE_EN_VIGUEUR
    - et autres que tu estimerais pertinents,

    plus un petit Form de gestion de tes taux, qui te permettra de les mettre a jour, a compter d'une certaine date (tu pourras donc meme les programmer a l'avance, ex: a compter du 1er decembre, on passe a 60$/heure).

    Apres ca, il faut que tu t'arranges pour pouvoir les lier a tes données : il te faut donc un champ 'Date' (en plus de tes champs Nom, projet, temps, taux), qui permettra a la suite de ton programme de déterminer quel taux appliquer.

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Ouais parfait merci, mais supposons que pour l'année 2007 le taux est de 25$, et qu'en 2008 il est de 30$, il y aurait moyen que lorsque j'entre la date de travail, si elle se trouve en 2007 , le taux sera facturé à 25$ et si la date du travail se trouve en 2008 le taux facturé sera de 30$ ? Si oui, svp donnez moi une piste sur comment programmer tout ca!

  5. #5
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    Oui par année c'est possible, puisque c'est possible par date.
    Si dans DATE_ENTREE_EN_VIGUEUR, tu entres 01-01-08, le montant du taux de cet enregistrement sera appliqué a partir du 1er janvier 2008 (enfin attention a ton format de date bien sur). Et puis si tu preferes, rien ne t'empeche de remplacer ton champ Date par un champ numérique dans lequel tu ne fais que rentrer l'année... mais cela limite les possibilités de jonglage du coup.

    Pour les pistes de programmation, je pourrais deja te dire de remplacer ton champ 'Taux' (ex: 35$) par le champ 'FK_ID_TAUX' qui est la clé étrangere 'héritée' de ta table T_TAUX (dont la clé primaire est ID_TAUX).

    Tes tables T_PUNCH et T_TAUX (admettons que tu l'aies appelé comme ca) sont donc liées par les champs FK_ID_TAUX et ID_TAUX respectivement.
    Apres, tu n'as plus qu'a construire une requête avec un champ calculé selon les valeurs de taux correspondantes (avec le générateur de requetes ca ira tout seul).

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Merci pour les réponses, j'ai fait exactement ce que tu dis, j'ai seulement un problème à créer la requête qui va verifier la date de la table T_punch afin de déterminer le taux équivalent de la table T_Taux. Un peu d'aide serait très bienvenue!

    Merci encore!

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Bon, après mes recherches, j'ai trouvé la "fonction" : Entre #08-01-01# et #08-12-31# qui pourrait me permettre de trouver le bon taux, mais je n'arrive pas à mettre tout ca ensemble, j'ai vraiment besoin d'un peu d'aide svp!

  8. #8
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    je me suis monté une petite base qui colle a ton cas... je travaille actuellement sur la requete...

    je t'avais dit:
    (avec le générateur de requetes ca ira tout seul).
    désolé, c'est pas le cas

    Au fait: en fait j'utilise une table T_TAUX et une table T_CATEGORIE_TAUX.
    T_TAUX (PK_ID_TAUX,F_MONTANT_TAUX, FK_ID_CATEGORIE_TAUX,F_DATE_ENTREE_EN_VIGUEUR)

    T_CATEGORIE_TAUX (PK_CATEGORIE_TAUX, F_DESCRIPTION_TAUX)

    T_PUNCH (PK_ID_PUNCH,F_EMPLOYE,F_PROJET,F_TEMPS_TRAVAIL,F_DATE_TRAVAIL,FK_ID_CATEGORIE_TAUX)

    Liaisons:
    T_TAUX (n)---(1) T_CATEGORIE_TAUX (1)---(n) T_PUNCH

    Ainsi, dans T_CATEGORIE_TAUX on peut trouver par ex:
    1: "Temps simple assemblage"
    La clé 1 se retrouve dans T_TAUX (FK_ID_CATEGORIE_TAUX) sur plusieurs enregistrements, correspondants a différentes dates d'entrée en vigueur.

    C'est sur ce schéma de tables que j'essaie de construire la requête.

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour ton aide, en fait dans ma table T_Taux, je pourrais mettre un champ : Date début du taux et un autre : Date fin du taux. J'essaye présentement de faire une requête du type ENTRE date début et date fin mais je n'y arrive pas...

  10. #10
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    As-tu vu l'edit de mon message précédent ?
    Le changement de schéma que j'y décris est important et nécessaire je crois, car avec notre premiere structure, et même l'ajout éventuel d'un champ F_DATE_FIN dans T_TAUX, la table T_PUNCH stocke une clé vers T_TAUX, une seule, alors qu'un changement de valeur d'un taux implique la création d'un nouvel enregistrement dans T_TAUX; ca impose donc une modification dans T_PUNCH ce qui ne semble pas logique d'un point de vue 'organisationnel'.

    C'est pour cela que je passe maintenant par une table T_CATEGORIE_TAUX, tu me suis ?

    je retourne sur la requete...

    PS: le probleme que tu as posé m'interesse, car j'avais deja voulu mettre cela en place dans une appli, et je n'avais pas encore pris le temps de le faire...

    Si d'autres personnes ont des idées !

  11. #11
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    Salut,

    J'ai un début de réponse pour la requete en question. Elle colle au schéma de données le plus récent, avec, comme tu le proposais, en plus une date d'entrée en vigueur pour le taux, une date de fin de validité (F_DATE_FIN) dasn la table T_TAUX.

    Il faudra bien sur adapter la requete a tes noms de tables et champs. La requete affiche en fait la table T_PUNCH, a laquelle on rajoute les colonnes MontantTaux (qui se base sur la donnée du champ FK_ID_CATEGORIE_TAUX), et Total.

    La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T_PUNCH.PK_ID_PUNCH, T_PUNCH.F_DATE_TRAVAIL, T_PUNCH.F_EMPLOYE, 
         T_PUNCH.F_CODE_PROJET, T_PUNCH.F_TEMPS_TRAVAIL, T_PUNCH.FK_ID_CATEGORIE_TAUX, 
    DLookUp("F_MONTANT_TAUX", "T_TAUX", "F_DATE_ENTREE_EN_VIGUEUR<=#" & T_PUNCH.F_DATE_TRAVAIL & "#" & " AND F_DATE_FIN>=#" & T_PUNCH.F_DATE_TRAVAIL & "#" & " AND FK_ID_CATEGORIE_TAUX=" & T_PUNCH.FK_ID_CATEGORIE_TAUX) AS MontantTaux, 
    [MontantTaux]*[F_TEMPS_TRAVAIL] AS Total
    FROM T_PUNCH
    ORDER BY T_PUNCH.F_DATE_TRAVAIL, T_PUNCH.FK_ID_CATEGORIE_TAUX;
    Je trouve pas ca concluant pour deux raisons:
    1. Je suis pas a l'aise dans les formats et manipulations de dates, et je fais face a un probleme de saisie quand je remplis manuellement mes tables de données: a partir du jour 13 dans le mois, Access semble avoir des difficultés a interpréter mes dates, et ne retourne aucune valeur dans MontantTaux... Y'a ptêt un "Format(...)" a appliquer quelque part dans l'expression MontantTaux...
    2. Le fait de devoir mettre une date de fin pour un taux, qui en soit, est une information polluante, car la date d'entrée en vigueur d'un taux devrait suffire pour le traitement.

    J'espere que ca va quand meme t'aider.

  12. #12
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Ok, merci encore pour ton aide, j'ai créer exactement les mêmes tables que toi pour me permettre de comprendre et d'analyser leur fonctionnement. Tout fonctionne bien sauf que quand je fait la requête, j'ai #Erreur dans MontantTaux et Total, L'erreur de Total doit venir du fait qu'il ne trouve pas la valeur de MontantTaux et que celle-si est requise pour Total. il doit avoir quelque chose que je ne fait pas correct?

  13. #13
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Au fait, comme relation j'ai mit PK_CATEGORIE_TAUX (de T_CATEGORIE_TAUX) relié à FK_ID_CATEGORIE_TAUX (de T_TAUX)

    et PK_CATEGORIE_TAUX (de T_CATEGORIE_TAUX) relié à FK_ID_CATEGORIE_TAUX (de T_PUNCH)

  14. #14
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    Oui pour les liaisons c'est correct, on a le même schéma relationnel.

    -Vérifie cependant si tu n'as pas inclus des accents dans les noms de champ, par exemple F_EMPLOYÉ, tandis que j'utilise F_EMPLOYE.

    - as-tu ajouté le champ F_DATE_FIN a la table T_TAUX ? (les valeurs a y mettre correspondent donc a la date d'entrée en vigueur du taux suivant moins un jour)

    - as-tu fait un copier-coller de ma requete dans le générateur en mode affichage SQL ? Mais si tu as progressivement créé la requête dans le générateur en mode création, et que tu as collé l'expression DLookup(...) a la place d'un nom de champ, tu devras remplacer dlookup par RechDom pour Access en version francaise.

    -Si tout ca ne t'aide pas, essaie de reconstruire progressivement l'expression de MontantTaux : par exemple en remplacant le troisieme argument de dlookup par une chaine vide, et progressivement, ajouter un critere supplémentaire, pour essayer d'isoler ce qui provoque l'erreur.

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Humm, ca ne fonctionne toujours pas, surement trop compliqué pour moi, merci quand même pour ton aide mais je vais essayer de trouver une solution plus simple.

  16. #16
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Humm j'ai peut-être une idée plus simple : Si je créer 3 tables équivalentes à mes taux : Junior, Intermédiaire et Senior. Dans chacune de ces tables j'ajoute ces 3 champs: Montant du taux, date debut et date fin. Puis dans ma table de punch, j'ai les champs: Nom employe, Heures travaillées, Date du travail et Taux (Taux offre une liste déroulante Avec les choix Junior/ Intermédiaire/ Senior) Ca serait possible que lorsque j'entre une données de type Jean Treamblay - 5 heures - 10/02/2008 - Senior Access va voir dans la table Senior et cherche le montant du taux dont la "Date du travail" est comprise entre date debut et date fin?

    Possible ou non?
    Dans ce cas, j'aurais juste à aller dans la table du taux, par exemple Senior et d'inscrire un nouveau montant ainsi que la date debut et date fin

    Si c'est possible, à quoi pourrait ressembler ma requête svp?

  17. #17
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    ok c'est toi qui vois...

    juste une note: si t'es a l'aise en vb, ca sera plus facile a faire qu'avec une seul requête...

    bon courage

  18. #18
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    je viens de voir ton post

    ma réponse serait que c'est possible, mais est-ce que c'est plus simple, a toi de voir...

    Dans ta requête, tu auras encore a utiliser la fonction Dlookup (RechDom) avec une syntaxe proche de celle-ci :
    RechDom("[TON_CHAMP]";[VOIR_EXPLICATION];"ton filtre de dates ici")
    Explication du deuxieme argument: usuellement on écrit entre guillemets le nom du domaine, i.e. ta table. Comme cette table dépend du champ Taux de ta table punch, tu viens inscrire le nom du champ a la place, donc [Taux], et pas entre guillemets...

    Je n'ai pas testé... tiens nous au courant !

    PS: si ce que tu trouves compliqué, c'est l'utilisation de la fonction RechDom/DLookup, je t'encourage a t'informer dans l'aide la-dessus, et t'entrainer a la pratiquer... Ca aide beaucoup dans bien des cas (mais c'est mon avis)

  19. #19
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    Salut Ludooo,

    J'ai finallement trouvé une requête très simple qui semble bien fonctionner, la voici: Même principe sauf qu'ici j'avait fait des tables : Produit et Achat avec le même produit mais avec 2 prix défférent selon la date. La solution est dans la partie WHERE, bonne journée!


    SELECT Achat.Nom, Achat.[date achat], Produit.Prix
    FROM Achat INNER JOIN Produit ON Achat.Nom=Produit.Nom
    WHERE [date achat] Between [date début] And [date fin];

  20. #20
    Membre habitué
    Profil pro
    Développeur
    Inscrit en
    Août 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2006
    Messages : 94
    Points : 127
    Points
    127
    Par défaut
    heureux que t'ai trouvé solution a ta question !

    bonne continuation

Discussions similaires

  1. Mise à jour des données d'une table avec un SELECT
    Par bouddine dans le forum Langage SQL
    Réponses: 0
    Dernier message: 20/05/2008, 16h36
  2. Mise à jour de données dans une table
    Par Stargate SG1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/04/2008, 18h38
  3. Mise à jour des données dans une colonne
    Par BZH75 dans le forum SQL
    Réponses: 9
    Dernier message: 09/01/2008, 16h18
  4. Réponses: 11
    Dernier message: 08/01/2008, 11h36
  5. [Debutant] mise à jour de donnée dans une base access
    Par brissou #55 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 25/12/2007, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo