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 confirm� Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48

    Informations forums :
    Inscription : Octobre 2004
    Messages : 166
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    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 confirm� Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48

    Informations forums :
    Inscription : Octobre 2004
    Messages : 166
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    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 confirm� Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48

    Informations forums :
    Inscription : Octobre 2004
    Messages : 166
    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 averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    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 confirm� Avatar de saidus
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48

    Informations forums :
    Inscription : Octobre 2004
    Messages : 166
    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