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

 Delphi Discussion :

Relation maître détail


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut Relation maître détail
    Bonjour à tous,
    pour réaliser une relation Maitre-détail entre deux tables PARADOX : La table ARTICLES (Ref_Interne, désignation, catégorie, Qte_Stock)
    et la table LIVRAISON (Date_Livraison, Ref_Interne, Qte_Livrée) avec le champs : Ref_Interne comme Index secondaire (Nom: MonIndex) (Définit à travers le module base de données)
    j'ai utilisé ce qui suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure TFStock.CreerRMD(Table:TTable; MSource:TDataSource; MChamps:String;Index:String);
     begin
      SupprimerRMD(Table);
      With Table do
      begin
       Active:=False;
       MasterSource:=MSource;
       MasterFields:=  MChamps;
       IndexFieldNames:=Index;
       Active:=True;
      end;
     end;
    je fais appel à cette méthode à travers l'événement On Click d'un RadioButton comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFStock.AvecDetailClick(Sender: TObject);
    begin
    Sdetail.Checked:=false;
    AvecDetail.Checked:=true;
    PanPicture.Visible:=false;
    PanLiv.Visible:=true;
    CreerRMD(DataModule2.Tabllivraison, DataModule2.DataSArticcle,'Ref_Interne','Ref_Interne' )  ;
    end;
    Tout allait bien!!! jusqu'à ce que je je décide à travers l'interface de l'application de rajouté un nouvel enregistrement Livraison, quand je suis revenue à la fiche de la liaison maitre-détail et en cliquant sur le RadioButton pour exécuter la liaison de la relation? UN MESSAGE D'ERREUR:
    ---------------------------
    Notification d'une exception du débogueur
    ---------------------------
    Le projet LGC.exe a provoqué une classe d'exception EDBEngineError avec le message 'L'index n'est pas à jour.
    Index: MonIndex'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    ---------------------------
    OK Aide
    ---------------------------

    Je n'ai pas compris pourquoi il demande la mise à jour de l'index et comment le faire????
    Merci++++++++++++++++++++++

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    Tout allait bien
    veut dire en mode consultation?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #3
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Salut;

    veut dire en mode consultation?
    Oui c'est ça, en mode consulation ça marchait, mais aprés avoir inséré une nouvelle livraison qui soit dit en passant se trouve sur une autre fiche, la liaison maître-détail ne fonctionne plus, même aprés avoir initialisé le projet!!! maintenant c'est automatique , le message d'erreur apparait à chaque tentative d'établissement de la relation maître détail.

    Merci++++++++++++++++++++++++

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    j'utilise souvent la relation maître détail avec une technique simple mais efficace. Elle consiste à casser la relation durant la mise à jour (ajout, suppression, modification) et la rétablir dans le cas de la consultation.

    C'est vrai que pour la suppression d'un enregistrement maître il faut supprimer ses détails pour pouvoir le supprimer, pour cela, utilises l'évènement BeforeDelete de la table maître avec une boucle sur les détails.

    je pense avoir été assez claire pour que tu puisses avancer.

    Bon codage.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Invité1
    Invité(e)
    Par défaut doublon
    Salut,

    Quand tu as inséré une nouvelle livraison, ton index ‘Ref_Interne’ doit contenir un doublon c’est pour cela le message d’erreur (un index n'accepte jamais de doublons)

    Je te conseil donc de :

    - Supprimer ton index secondaire « mon-index »
    - déclarer deux index dans ta table de sorte que leurs combinaison n’ai pas de doublons c’est deux index doivent être successifs et en premier
    exemple j’ai réorganisé ta table comme suit et j’ai déclaré les champs « Ref_Interne » et « Code_Ctr » comme index de la table :

    Ref_Interne *
    Code_Ctr *
    Date_Livraison
    Designation
    Qte_livree
    Fournisseur

    Ce n’est qu’un exemple tu peux choisir autre chose le plus important c’est que la combinaison de ces deux index n’ai pas de doublons.


    Bonne chance

  6. #6
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par samy larson Voir le message
    Salut,

    Quand tu as inséré une nouvelle livraison, ton index ‘Ref_Interne’ doit contenir un doublon c’est pour cela le message d’erreur (un index n'accepte jamais de doublons)

    Je te conseil donc de :

    - Supprimer ton index secondaire « mon-index »
    - déclarer deux index dans ta table de sorte que leurs combinaison n’ai pas de doublons c’est deux index doivent être successifs et en premier
    exemple j’ai réorganisé ta table comme suit et j’ai déclaré les champs « Ref_Interne » et « Code_Ctr » comme index de la table :

    Ref_Interne *
    Code_Ctr *
    Date_Livraison
    Designation
    Qte_livree
    Fournisseur

    Ce n’est qu’un exemple tu peux choisir autre chose le plus important c’est que la combinaison de ces deux index n’ai pas de doublons.


    Bonne chance

    Bonjour,
    Oui j'ai repris la table avec deux index mais pas ceux choisi par toi, car il est possible d'avoir plus d'une livraison d'un même article et pour le même contrat, j'ai plutôt opté pour :
    Ref_Interne *
    Date_Livraison *
    Designation
    Code_Ctr
    Qte_livree
    Fournisseur
    Mais le HIC, c'est que le message : Liaison circulaire que j'ai déja réglé au paravant, me fait des siennes à nouveau!!!

    Décidemment, boucher un trou en cré un autre

    Merci+++++++++++

  7. #7
    Invité1
    Invité(e)
    Par défaut
    Salut,

    Regarde si, la relation maitre-détail est détruite, quand tu fermes ta fiche Fstock

    Je pense que le problème vient de la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFStock.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Datamodule2.TabArticle.Filtered:=false;
     SupprimerRMD(DataModule2.Tabllivraison);
    end;
    avec ça, ça devrait bien marcher

    a+++++++++++

  8. #8
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par samy larson Voir le message
    Salut,

    Regarde si, la relation maitre-détail est détruite, quand tu fermes ta fiche Fstock

    Je pense que le problème vient de la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TFStock.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Datamodule2.TabArticle.Filtered:=false;
     SupprimerRMD(DataModule2.Tabllivraison);
    end;
    avec ça, ça devrait bien marcher

    a+++++++++++
    Crois moi sur parole (Ok c'est pas non plus la meilleure réplique compte tenu de ma personnalité mais bon !!!) ces deux lignes y sont déja!!!

Discussions similaires

  1. Problème de création relation maître détail
    Par codial dans le forum Bases de données
    Réponses: 15
    Dernier message: 28/08/2016, 00h30
  2. [BDD]comment créer une relation maître-détails?
    Par SmileSoft dans le forum C++Builder
    Réponses: 7
    Dernier message: 27/01/2009, 08h29
  3. Publipostage; Relation maître détails
    Par Just-Soft dans le forum Word
    Réponses: 3
    Dernier message: 12/01/2009, 10h54
  4. Réponses: 14
    Dernier message: 07/10/2008, 12h45
  5. Problème de création relation maître détail
    Par codial dans le forum Firebird
    Réponses: 4
    Dernier message: 21/02/2008, 16h33

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