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 Delphi Discussion :

Relation maitre détail


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut Relation maitre détail
    Bonjour,

    j'ai créé une relation maitre-detail entre une table Maitre (Livraisons) ayant pour clé un champ LIV_ID et une table detail (Sorties) avec le champ LIV_ID de la table maitre.
    La table maitre comprend une liste de bon de commande et la table detail le détail des bons de commande:
    Sa structure:
    SOR_ID Clé de la table Détail
    LIV_ID Clé de la table maitre
    .../...

    Cette relation fonctionne bien, lorsque je sélectionne un enregistrement dans la table maitre j'ai bien le détail qui s'affiche.

    Où je bloque c'est pour mettre à jour ma table detail:
    Comment insérer dans la table détail la valeur du champ LIV_ID de la table maitre?

    J'utilise des IBDataset et dans la table detail j'ai mis dans InsertSQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO SORTIES
      ( SOR_ID, PRO_ID,  LIV_ID, SOR_DATEMVT, SOR_QTE,SOR_PRIX,SOR_REF,SOR_DESCRIPTION,SOR_DUS)
    VALUES  ( :SOR_ID, :PRO_ID, :LIV_ID, :SOR_DATEMVT,:SOR_QTE,:SOR_PRIX,:SOR_REF,:SOR_DESCRIPTION,:SOR_DUS)
    mais ça ne marche pas j'ai un message d'erreur me disant que le champ LIV_ID doit avoir une valeur.

    Pour créer cette relation j'ai mis pour ma table détail le datasource de la table maitre et j'ai fait un SelectSQL

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM sorties   WHERE liv_id= :liv_id
    Voilà mon souci du moment

    Cordialement

    Codial

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    salut,

    Dans l'event AfterInsert de ta table détail, tu renseignes la valeur de ta clé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      TaTableDetail.FieldByName('LIV_ID').AsInteger := TaTableMaitre.FieldByName('LIV_ID').AsInteger;
    Et c'est tout !

    @+ Claudius

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    bonjour,

    merci beaucoup pour cette réponse

    Codial

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Re,

    En fait j'avais pensé à cette solution mais le problème c'est que les IBDataSet n'acceptent pas les .FieldByName !!!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Re,

    En fait je viens de contourner le problème en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TaTableDetail.FieldByName('LIV_ID').AsInteger := TaTableMaitre.FieldByName('LIV_ID').AsInteger;
    Par le nom du champ persistant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TDM.IBDSortiesAfterInsert(DataSet: TDataSet);
    begin
      Dataset.FieldByName('LIV_ID').asInteger:= DM.IBDLivraisonsLIV_ID.value;
    end;
    Encore merci pour la piste

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

Discussions similaires

  1. Exemple d'application Relation Maitre-détail avec Dbexpress
    Par Peter K. dans le forum Bases de données
    Réponses: 0
    Dernier message: 13/11/2007, 11h33
  2. Relation maitre détail dans un dataset
    Par ctl1970 dans le forum C#
    Réponses: 4
    Dernier message: 12/11/2007, 00h16
  3. Mise à jour autravers d'une relation maitre-Détail
    Par Paxaranne dans le forum Forms
    Réponses: 3
    Dernier message: 26/07/2007, 14h00
  4. la suppression dans la relation maitre détail
    Par 6AAAAA dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/07/2007, 20h20
  5. Gérer une relation Maitre détail
    Par codial dans le forum Bases de données
    Réponses: 10
    Dernier message: 16/10/2006, 10h01

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