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

C++Builder Discussion :

C++Builder et MySQL


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut C++Builder et MySQL
    Bonjour !!
    j'ai la situation suivante :
    2 Tables MySQL (type MyIsam )en maitre/detail ( Sale et DSale)
    j'ai developpe une petite application en C++Builder en utilisant des composant MySQLDAC d'acces au server mysql
    le probleme est que je n'arrive pas a supprimer les enregistrement detail quand je supprime l'enregistrement maitre et cela meme en utilisant l'evenement OnBeforeDelete de la table maitre


    Merci !!!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Il faudrait sans doute un peu plus de détails pour qu'on puisse t'aider.

    je n'arrive pas a supprimer les enregistrement detail quand je supprime l'enregistrement maitre
    OK mais que se passe-t-il? Que demandes-tu et qu'obtiens-tu? Etc...

  3. #3
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    Bonjour !!
    Ce que je voulais dire est :
    j'ai 2 table : Sale(CdSale PrimayKey, ...) et
    DSale(CdDsale PrimayKey, CdSale,....)
    Sale = maitre
    DSale = detail
    si j'ai un enregistrment maitre qui a CdSale=1 et 5 enregistrement detail qui corresponde a cet enregistrmet(maitre),alors le moment de la suppression du maitre les 5 enregistrement detail restent !

    j'espere etre un peu claire !!
    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Oui j'ai bien compris ce qui se passe (ou plutot ce qui ne se passe pas) mais tu ne dis pas ce que tu demandes:
    As-tu demandé la suppression des enregistrements de la table détail? La suppression de la table maître n'a aucune influence sur la table détail si tu ne demandes rien.
    Si tu as demandé la suppression, comment l'as-tu fait? Tu dis que tu as utilisé un evenement BeforeDelete, que demandes-tu dedans? Il doit y avoir soit un code incorrect, soit un code correct mais qui ne produit pas l'effet demandé.

    Normalement tu devrais avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {TableDetail->First();
    while(!TableDetail->Eof)
    {
    TableDetail->Delete();
    }
    // Next() n'est pas nécessaire, 
    // Delete() avance à l'enregistrement suivant
    }
    :

  5. #5
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    Bonjour !!
    c'est exactement ce que je fait mais !!!!!!

    l'evenement OnAfterPost et OnAfterDelete de la table detail calcule une valeur qu'elle renvoie a la table maitre !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
              Extended tot = 0;
              if(Sale->State!=dsEdit)
                 Sale->Edit();
                 DSale->First();
              while(!DSale->Eof)
              {
                 tot+=DSaleQT->Value;
                      DSale->Next();
              }
              SaleQT->Value    = tot;
              Sale->Post();
    merci de votre aide

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Je te conseille qd même un truc genre variable private bool recalculer
    qui vaudrait 1 par defaut, et 0 si l'appel vient d'une suppression de la table maitre (pas la peine de recalculer dans ce cas). Et tu mets ton AfterDelete de la table detail dans une boucle if(recalculer). Ca evitera plein d'operations inutiles. Tu peux aussi utiliser une requete SQL, si tes tables sont grosses ça va beaucoup plus vite!
    Mais ça n'explique pas que les enregistrements détail ne soient pas supprimés si tu le demandes! Ici, il devrait refaire un calcul à chaque suppression de détail, puis renvoyer 0 à la table maitre qd il n'y a plus rien en détail, puis supprimer l'enregistrement maitre.

    Est-ce qu'on peut voir ce OnDelete de la table maître? Comme tes noms de table se ressemblent (Sale et DSale) est-ce que tu n'as pas interverti?

    A suivre...

  7. #7
    Membre régulier Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47

    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Points : 89
    Points
    89
    Par défaut
    Bonjour !!!
    merci pour votre aide mon ami !!
    voila le code que j'utilise pour la suppression :
    Table Maitre : OnBeforedelete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
               if(!IsDel)
               IsDel = true;
               DSale->First();
               while(!DSale->Eof)
              {    DSale->Delete();
              }
               if(IsDel)
               IsDel = false;
    ou la variable IdDel est booleen , initialiser a false
    Table Detail : OnAfterdelete :
    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
     
           if(!IsDel)
           {
              Extended tot = 0;
              if(Sale->State!=dsEdit)
                 Sale->Edit();
                 DSale->First();
              while(!DSale->Eof)
              {
                 tot+=DSaleQT->Value;
                      DSale->Next();
              }
              SaleQT->Value    = tot;
              Sale->Post();
           }
    et ca marche !!!
    mais je suppose qu'il ya une astuce en SQL et cela en ecrivant une requette dans la propriete DeleteSQL du composant!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MyQueryMaster->SQLDelete = "DELETE master, detail FROM master, detail 
    WHERE  master.id = detail.master_id and master.id = :Old_id";
    voila tout !!
    Merci Bien

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

Discussions similaires

  1. C++ Builder et MySQL
    Par guiga dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/03/2007, 01h25
  2. [C++BUILDER ET MYSQL]
    Par saidus dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/09/2005, 08h48
  3. c ++ Builder et MySQL
    Par p59polo dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/05/2004, 20h15
  4. Probleme C++Builder et Mysql
    Par noname dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 13h40

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