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

Requêtes MySQL Discussion :

Changements de colonnes dans une BDD MySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    787
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 787
    Points : 276
    Points
    276
    Par défaut [Résolu]Changements de colonnes dans une BDD MySQL
    Bonjour je réalise un prog en C++ Builder 5 qui se conecte à une base de données MySQL.
    Mon problème est le suivant:
    j'ai 15 champs(releve1,releve2,...releve15) dans ma table "releves". J'ai pluseurs centaines d'enregistrements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    releve1    releve2     releve3 .......  releve15
    --------    ----------    ---------          ----------
    je souhaiterais en fait pour chacune des "lignes" de ma table(donc pour chaque enregistrement) "décaller" les valeurs des champs relevés de 1 colonne vers la gauche...et mettre "0" ) la dernière position(champ releve15)
    donc si on a ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    releve1    releve2     releve3 .......  releve15
    --------    ----------    ---------          ----------
       50           10              15                   56
    J'aimerais avoir ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    releve1    releve2     releve3 .......  releve15
    --------    ----------    ---------          ----------
       10            15            56                   0
    je réalise donc cela de la manière suivante:
    je sélectionne tous les champs de la table releves

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      EcranAccueil->RequeteNomReleve->Active = false;
      EcranAccueil->RequeteNomReleve->SQL->Clear();
      EcranAccueil->RequeteNomReleve->SQL->Add("SELECT * FROM Releves ");
      EcranAccueil->RequeteNomReleve->Prepare();
      EcranAccueil->RequeteNomReleve->Open();
      EcranAccueil->RequeteNomReleve->Active = true;
    ensuite je mets tout ds des variables (le valeurs des relevés quoi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      //On reprend les relevés
     
     Releve1 = EcranAccueil->RequeteNomRelevereleve1->Value;
     Releve2 = EcranAccueil->RequeteNomRelevereleve2->Value;
     Releve3 = EcranAccueil->RequeteNomRelevereleve3->Value;
     Releve4 = EcranAccueil->RequeteNomRelevereleve4->Value;
     Releve5 = EcranAccueil->RequeteNomRelevereleve5->Value;
     Releve6 = EcranAccueil->RequeteNomRelevereleve6->Value;
     Releve7 = EcranAccueil->RequeteNomRelevereleve7->Value;
     Releve8 = EcranAccueil->RequeteNomRelevereleve8->Value;
     Releve9 = EcranAccueil->RequeteNomRelevereleve9->Value;
     Releve10 = EcranAccueil->RequeteNomRelevereleve10->Value;
     Releve11 = EcranAccueil->RequeteNomRelevereleve11->Value;
     Releve12 = EcranAccueil->RequeteNomRelevereleve12->Value;
     Releve13 = EcranAccueil->RequeteNomRelevereleve13->Value;
     Releve14 = EcranAccueil->RequeteNomRelevereleve14->Value;
     Releve15 = EcranAccueil->RequeteNomRelevereleve15->Value;
    AnsiString Releve16 = '0';
    et ensuite je peux décaller en mettant le bonnes valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //on va les décaller de une place et laisser la dernière "vide"
     EcranAccueil->RequeteNomReleve->Close();
      EcranAccueil->RequeteNomReleve->Active = false;
      EcranAccueil->RequeteNomReleve->SQL->Clear();
      EcranAccueil->RequeteNomReleve->SQL->Add("UPDATE releves SET releve1 =:NumeroReleve1, releve2 =:NumeroReleve2, releve3 =:NumeroReleve3, releve4 =:NumeroReleve4, releve5 =:NumeroReleve5, releve6 =:NumeroReleve6, releve7 =:NumeroReleve7, releve8 =:NumeroReleve8, releve9 =:NumeroReleve9, releve10 =:NumeroReleve10, releve11 =:NumeroReleve11, releve12 =:NumeroReleve12, releve13 =:NumeroReleve13, releve14 =:NumeroReleve14, releve15 =:NumeroReleve15 ");
      EcranAccueil->RequeteNomReleve->Prepare();
      // EcranAccueil->RequeteNomReleve->ParamByName("materiel")->Value = nom;
       EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve1")->Value = Releve2;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve2")->Value = Releve3;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve3")->Value = Releve4;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve4")->Value = Releve5;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve5")->Value = Releve6;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve6")->Value = Releve7;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve7")->Value = Releve8;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve8")->Value = Releve9;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve9")->Value = Releve10;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve10")->Value = Releve11;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve11")->Value = Releve12;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve12")->Value = Releve13;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve13")->Value = Releve14;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve14")->Value = Releve15;
      EcranAccueil->RequeteNomReleve->ParamByName("NumeroReleve15")->Value = Releve16;
      EcranAccueil->RequeteNomReleve->ExecSQL();
    Le problème est que ce principe marche pour UN enregistrement spécifique( WHERE nom =...) alors ca marche.
    Mais icic je veux tout faire d'un coup et ca regarde en fait la première ligne de ma table (premier enregistrement) et puis ca remplace tous les champs de TOUS les enregistrements par ceux de la première ligne!!!je me retrouve donc avec des centaines de "memes lignes"
    je voudrais donc :
    faire en fait ce code..enregistrement par enregistrement...
    Qqun pourrait il me dire comment faire??par code??ou requete SQL??
    Merci à vous..
    Cordialement

  2. #2
    L-W
    L-W est déconnecté
    Nouveau Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE releves SET releve1=releve2, releve2=releve3,[...],releve15=0;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    c'est peut-être un peu artificiel comme solution mais tu ne pourrais pas envisager de renommer tes colonnes tout simplement ?
    Le décalage se ferait alors automatiquement, non?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    787
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 787
    Points : 276
    Points
    276
    Par défaut
    ben oui j'y avais pensé mais j'aurai en fait des lignes qui ne devront pas bouger..donc c'est un peu plus compliqué.
    Mais pour L-W
    UPDATE releves SET releve1=releve2, releve2=releve3,[...],releve15=0;
    ce code..oui je vois bien...mais il prend ligne par ligne???ou il mpe prend encore la première ligne et voila?? Votre code est en fait exactement le meme que moi!!
    Sauriez vous me répondre??
    Merci à vous

  5. #5
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    ce code balaye toute la table releve et update ceux qui correspondent à la condition du where (comme un select). donc s'il n'y a pas de condition dans le where, il update toute la table...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    787
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 787
    Points : 276
    Points
    276
    Par défaut
    ok donc ca ira pas!!
    Je crois que je vais faire comme proposéau lieu de "déplacer" mes données vers la gauche..je vais renommer mes colonnes (champs) vers la droite..ca sera plus simple!!

    Mais auriez vous le code SQL pour par exemple renommer le champ "releve1" en "releve2"??
    Cordialement

  7. #7
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    non tu as mal compris : le update prend chaque ligne séparément et effectue cette opération sur chaque ligne ... en utilisant les données correspondante a la ligne en question.
    Bref, il fait exactement ce que tu veux , pour l'ensemble de la table, en une seule instruction.
    tu peux meme restreindre avec WHERE si tu ne veux pas que toute la table soit changée mais seulement une partie.

  8. #8
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    desolé d'insister mais je pense justement que ce code te convient parfaitement. il fait excatement ce qui est demandé, il balaye la table et pour chaque enregistrement, il prend les valeurs des colonne +1 et les mets dans colonne.
    fait un essai, tu verra bien que ça va fonctionner.

    POur renommer les colonne, ce doit être avec ALTER TABLE.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    787
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 787
    Points : 276
    Points
    276
    Par défaut
    merci à vous!! Ca marche du tonnerre!!!
    Ca c'est bien moi..Pq faire simple quand on peut faire compliqué...
    Encore Bravo et merci!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  2. Sauvegarder une instance d'une classe Java dans une BDD MySQL
    Par malag dans le forum Administration
    Réponses: 1
    Dernier message: 03/09/2006, 19h23
  3. pb pour rentrer une valeur dans une bdd mysql
    Par gaetan.tranvouez dans le forum Requêtes
    Réponses: 25
    Dernier message: 02/06/2006, 21h29
  4. inserer des photos dans une bdd mysql
    Par oceane751 dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/05/2006, 20h06
  5. Vérifier l'existance d'une colonne dans une table MySQL
    Par )3lade dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 18/04/2006, 11h46

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