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

ADO.NET Discussion :

Mettre à jour un champ d'une BD


Sujet :

ADO.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 31
    Points
    31
    Par défaut Mettre à jour un champ d'une BD
    Bonjour:
    j'ai une BD qui gère les ventes d'un établissement commercial. La table ARTICLES(id_article, désignation, PrixUnitaire). Ce que j'aimerai savoir est comment mettre à jour par exemple le PrixUnitaire d'un article si le prix de ce dernier venait à changer, sans pour autant mettre à jour les précédents enregistrements qui ont été fait avec un prix différent.
    Merci d'avance!

  2. #2
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut
    Salut,

    Tu dois sélectionner l'enregistrement à mettre à jour en fonction de ton article grâce à son id.

    Exemple: Tu dois changer le prix d'un article dont la désignation est "paire de baskets". Tu récupère son id (id_article). Tu fais ensuite une requête pour la mise à jour du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ARTICLES, SET PrixUnitaire = 100 
    WHERE article_id = 1;

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 31
    Points
    31
    Par défaut
    Le problème est que j'établis les factures par la même occasion. Imaginons que je veuille retrouver la commande passé par un client à une certaine date antérieure à celle où j'ai modifié le prix de l'article. Je voudrais savoir si la mise à jour du prix de l'article affectera sur les commandes effectuées avec l'ancien prix

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans le cas présent, oui, par rapport à ton besoin tu dois créer une table de prix pour chaque article avec la période pendant laquelle le prix était valable.

    De cette tu peux utiliser ton article comme tu veux, et quand tu édites une facture tu récupères le prix valide lors de l’établissement de la facture.

  5. #5
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut
    Comme le dit gcorbineau, une évolution de ton modèle de données sera nécessaire pour prendre en compte ton besoin.

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Le plus simple est je pense d'ajouter une colonne de type Datetime dans ta table ARTICLES qui prendra GetDate() en valeur par défaut. De cette manière tu pourras savoir à quel moment ce prix est entré en application et tu pourras faire les requêtes adéquates.
    Kropernic

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    En revanche tu ne mettras pas à jour (pas de "UPDATE") lors du changement de prix : tu ajouteras un enregistrement.

    Imaginons que ta table à comme clé primaire "id_article" + "DateModif" :
    Ta requête devient :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO articles (id_article, designation, prixunitaire) VALUES (1,'Basket',100);

    A priori tu n'a pas à mettre à jour la date de Modif (nvx champs DateModif) puisque si tu utilises la proposition de Kropernic, elle a pour valeur par défaut GetDate().

    Tu peux également créer un champs clé primaire dans ta table de type AutoIncrement (selon le type de ta BD) et enlever la clé sur id_article, la requête resterait à prioris la même.

    Quand tu voudras sélectionner le prix d'un article à une date précise tu auras :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT prixunitaire FROM articles WHERE id_article = TonArticle AND datemodif = TaDate

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 161
    Points : 166
    Points
    166
    Par défaut
    Bonjour à tous,

    Je pense que devrais avoir une table VENTES où tu retraces toutes les ventes. Ainsi ta table article reste intacte. Même si tu changes le prix unitaire, les anciens prix de la table VENTES resteront inchangés. Les nouvelles ventes prendront les nouveaux prix.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par peregna2007 Voir le message
    Bonjour à tous,

    Je pense que devrais avoir une table VENTES où tu retraces toutes les ventes. Ainsi ta table article reste intacte. Même si tu changes le prix unitaire, les anciens prix de la table VENTES resteront inchangés. Les nouvelles ventes prendront les nouveaux prix.
    Oui, la logique veux de toute manière d'avoir une table d'historique pour les lignes et les en-têtes de facture (si on change l'adresse d'un client, on doit pourtant pouvoir sortir un double d'une facture avant le changement d'adresse où apparait l'ancienne).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Mettre à jour un champ avec une Liste déroulante
    Par Narutosaad dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/08/2010, 12h18
  2. Réponses: 4
    Dernier message: 03/07/2008, 15h53
  3. Réponses: 3
    Dernier message: 24/10/2007, 10h01
  4. Comment mettre à jour 1 champ d'une table via une autre tabl
    Par cpasmoibiensur dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/02/2006, 13h33

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