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 :

Clé étrangère


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut Clé étrangère
    Je vais présenter mon problème par un exemple classique
    J'ai une table
    "commande"
    {Numero_Cde : numéro autoincrémenté
    Client : Texte,
    Date_cde}

    "Detail_Cde"
    {index : numéro autoincrémenté,
    Numero_Cde,
    Article,
    Prix}

    Dans mon interface, l'utilisateur crée un nouvelle commande et ajoute des articles puis clique sur un bouton. A cet instant, une nouvelle commande est crée dans la table "Commande".
    Je veux récupérer ce numéro généré autmatiquement par ma base pour faire une requête d'insertion des articles corespondants à cette commande dans la table "detail_cde".
    Comment faire?
    Merci

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Ca dépend du SGBD utilisé...(Oracle, MySQL, etc...)

    Tu devrais plutôt posé cette question sur le forum correspondant ou consulter les FAQ
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Je traville sous postgres.
    Mais il me semble qu'il faut d'abord insérer les données dans la table commande puis récupérer le numéro créée automatiquement. Ceci permettra ensuite de créer dynamiquement la requête d'insertion dans la table Detail_Cde.
    Mon seul souci c'est que si plusieurs utilisateurs font la même manip simultanément le risque de confusion est qusiment sûr.

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Il faut que tu utilises les capacités transactionnelles du SGBD.

    exemple :

    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
     
    ComposantsDatabase.beginTrans; // cela dependra du composant utilisé
     
    With xxxQuery do
    try
      // Requete d'insertion dans la table commande
      ...
      // récupération du numéro de commande
      ...
      // requete d'insertion dans la table detail_cde
      ...
      ComposantsDatabase.CommitTrans; // s'il n'y a pas d'erreur on valide le tout
    Except on E:Exception
      begin
         ComposantsDatabase.RollBackTrans; // en cas d'erreur on annule tout
      end;
    end;
    Après faut voir si le SGBD gère les transactions.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par ZIED
    Je traville sous postgres.
    Mais il me semble qu'il faut d'abord insérer les données dans la table commande puis récupérer le numéro créée automatiquement. Ceci permettra ensuite de créer dynamiquement la requête d'insertion dans la table Detail_Cde.
    Mon seul souci c'est que si plusieurs utilisateurs font la même manip simultanément le risque de confusion est qusiment sûr.
    je pence pas avec un autoincrément qu'il aura de probléme
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Je traville sous PostgreSQL
    Je dois insérer plusieurs lignes pour la même commande dans la table "Detail_cde".
    Est-ce qu'il n' y a pas de risque d'erreurs, si un autre utilisateur crée une nouvelle commande dans la table "COMMANDE" avant que je termine l'insertion de toutes mes lignes dans la table "Detail_cde"?

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par ZIED
    Je traville sous PostgreSQL
    Je dois insérer plusieurs lignes pour la même commande dans la table "Detail_cde".
    Est-ce qu'il n' y a pas de risque d'erreurs, si un autre utilisateur crée une nouvelle commande dans la table "COMMANDE" avant que je termine l'insertion de toutes mes lignes dans la table "Detail_cde"?
    Normalement non, les transactions sont la pour ça.

    ici un tres bon article qui parle des transactions.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre habitué
    Profil pro
    Chef d’entreprise
    Inscrit en
    Mars 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef d’entreprise

    Informations forums :
    Inscription : Mars 2002
    Messages : 212
    Points : 149
    Points
    149
    Par défaut
    Pouvez vous me donner l'url de l'article?

  9. #9
    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
    Clique sur 'ici' du message de Malatar !

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/11/2003, 15h57
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. [clé primaire et étrangère]
    Par viny dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/08/2003, 18h23
  4. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38
  5. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37

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