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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    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 éprouvé

    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
    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
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    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 éprouvé

    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
    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
    Membre expérimenté
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    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.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    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

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