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

Bases de données Discussion :

Supprimer un champ de ma base de données depuis un bouton "Supprimer"


Sujet :

Bases de données

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut Supprimer un champ de ma base de données depuis un bouton "Supprimer"
    Bonjour,

    J'ai créé une base de données avec 2 table, SCENARIO et EFFET. J'ai aussi créé un IHM avec Qt sur lequel j'ai mis un bouton "supprimer".
    J'aimerais, depuis mon bouton "supprimer", supprimer un champs dans ma base de données avec tout ce qu'il contient, soit son nom, sa description, son id ...

    J'ai déjà testé quelques trucs mais sans succès ..

    Pour l'instant j'ai codé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Dconception::pushSupp_clicked()   // mon bouton supprimer s'appelle pushSupp et la fenêtre de l'IHM où il se trouve s'appelle Dconception
    {
          QSqlQuery query(*m_db) ;
     
          requete = "SELECT nom_programme FROM SCENARIO WHERE nom_programme="; // nom_programme est un champ de ma table SCENARIO
     
          scenario = lineScenario->text() ; // lineScenario est le nom du champ de mon IHM où je tape le nom de mon scénario
          requete += scenario ;
     
          qDebug()<< "requete " << requete << endl;
     
          query.exec("DELETE * FROM EFFET,SCENARIO WHERE EFFET.nom_effet = SCENARIO.nom_effet AND nom_programme like lineScenario "); 
    }
    Et quand je met comme nom du scénario "test" (que j'ai bien sur dans ma base de données) et j'ai j'appuie sur le bouton "Supprimer" j'ai :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    requete  "SELECT nom_programme FROM SCENARIO WHERE nom_programme=test"

    et "test" est encore dans ma base de données ..


    Si quelqu'un pouvait m'aider ce serait bien gentil à vous..

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    Salut,
    je ne pense pas que le problème soit là mais tu peux mettre des guillemets pour commencer ? ca m'irrite les yeux :p :

    requete += "\'"+scenario+"\'";
    pour qu'on ait [...] FROM SCENARIO WHERE nom_programme='test'

    si on a le droit de mettre des guillemets dans lineScenario, ca devient un peu plus compliqué parce que je pense même que si on utilise QString et .arg(), ca risque de pas passer pour les requetes sql


    t'es sûre d'avoir ajouté
    QT += sql
    dans ton .pro ?

  3. #3
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut oui le .pro est ok
    Bonjour et merci de votre réponse.

    Le .pro est ok, j'ai codé le bouton "ok" de mon IHM est il n'y a pas eu de problème il me renvoi bien les valeur de mon nom de scénario "test" lorsque je lui demande.

    J'ai avancé sur mon bouton "supprimer", mais il ne fonctionne toujours pas, il y a apparemment un soucis avec le QString valeur = query.value(0).toString() ;

    J'en suis là :

    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
    25
    26
    27
    28
    29
    30
    31
    void Dconception::pushSupp_clicked()
    {
        QString scenario = lineScenario->text() ;
     
        if ( !m_db ) qDebug() << "!m_db" ;
        if ( !m_db->isOpen() )  qDebug() << "!m_db->isOpen()" ;
     
        qDebug() << "scenario" << scenario << endl;
     
       QSqlQuery query(*m_db) ;
     
       QString nom("SELECT nom_effet FROM SCENARIO WHERE ");
       nom += "nom_programme = \"" + scenario + "\"";
     
       query.exec(nom);
     
       QString valeur = query.value(0).toString() ;
     
        QString suppr("DELETE FROM EFFET WHERE ") ; //Je supprime déjà les valeurs dans la table EFFET
        suppr += "nom_effet =\"" + valeur + " \"";
     
        query.exec(suppr);
     
        QString suppr2("DELETE FROM SCENARIO WHERE "); // Je supprime ensuite les valeurs dans la table SCENARIO
        suppr2 += "nom_effet =\"" + valeur + "\"";
     
        query.exec(suppr2);
     
         qDebug()<< "requete " << suppr << endl;
     
    }

  4. #4
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Bonjour, est-ce que tu es passée en debug sur ton code pour voir comment il se déroule ?
    Dans ton code tu devrais tester plus de choses ! Le retour de ta requête SELECT, s'il renvoie bien un résultat ou non (et un seul). Les retours des appels à query.exec pour voir si l'exécution de requête se passe bien, et si non récupérer l'erreur et l'afficher query.lastError te renvoie un QSqlError qui peut afficher un message d'erreur. C'est plus long à écrire mais c'est important de tester les étapes de ton code et d'afficher des erreurs quand il y a un problème, ça t'aidera pendant le dev à voir tout de suite à quel endroit ça bug et ça aidera l'utilisateur à savoir ce qu'il se passe ou quand il se trompe.

  5. #5
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut J'ai trouvé !
    Merci pour votre aide, j'ai enfin trouvé !

    Voici le code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    void Dconception::pushSuppr_clicked() 
    {
     
         requete = "SELECT nom_programme FROM SCENARIO WHERE nom_programme=";
     
         QString scenario = lineScenario->text() ;
         qDebug() << "scenario : " << scenario ;
         requete += "\'"+scenario+"\'";
     
        if ( !m_db ) qDebug() << "!m_db" ;
        if ( !m_db->isOpen() )  qDebug() << "!m_db->isOpen()" ;
     
       QSqlQuery query(*m_db) ;
     
       QString select("SELECT nom_effet FROM SCENARIO WHERE ");
       select += "nom_programme= \"" + scenario + "\"";
     
       query.exec(select);
     
       QString valeur ;
     
       int fieldNumber = query.record().count() ;
     
       if ( query.first() ) // requête ok
       {
             for ( int n = 0 ; n < fieldNumber ; ++n )
             {
            valeur = query.value(n).toString() ; // Récupére le résultat de la requête
            qDebug() << "résultat select. : " << valeur ; // Affiche le résultat
             }
       }
     
        QString suppr1("DELETE FROM EFFET WHERE ") ;
       suppr1 += "nom_effet = \"" + valeur + "\"";
     
        query.exec( suppr1 );
     
         QString suppr("DELETE FROM SCENARIO WHERE ");
         suppr += "nom_effet = \"" + valeur + "\"";
     
         query.exec( suppr );
     
         qDebug()<< "requete " << suppr << endl;
     
         qDebug()<< "requete " << suppr1 << endl;
    }

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

Discussions similaires

  1. crypter un champs de la base de donnée
    Par renofx1 dans le forum Administration
    Réponses: 4
    Dernier message: 06/01/2006, 14h53
  2. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31
  3. longueur des champs de ma base de données
    Par mictif dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/06/2005, 19h19
  4. position du champs dans une base de donnée
    Par eric205 dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/04/2005, 09h22
  5. [MFC] Champs d'une base de donnée
    Par MadChris dans le forum MFC
    Réponses: 5
    Dernier message: 24/03/2004, 16h21

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