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 :

affectation d'un champ a une table agent


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 18
    Points
    18
    Par défaut affectation d'un champ a une table agent
    Bonsoir a tous

    voila que j'essaie de comprendre comment fonctionne la relation des champs d'une table vers une autre table j'ai pas mal essayé mais j'y arrive pas j'ai comme-me rechercher sur Google mais j'ai toujours pas compris

    voila je m'explique :

    j'ai une table agent et une table matériels ( informatique ) et une table affectation

    j'essaie de faire une relation entre la table agent et la table matériels dans la table affectation en ajoutant des champs fields depuis delphi 7

    j'ai déja réussi a affecter le matériel avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DataModule1.Affect.Append;
    DataModule1.AffectDATE_AFFECTATION.value := now;
    DataModule1.AffectID_AGENT.Value := DataModule8.AGENTSID_AGENT.Value;
    DataModule1.AffectID_MATERIEL.Value := DataModule1.T_MATERIELSID_MATERIEL.Value;
    DataModule1.AFFect.Post;
    maintenant j'ai dans le dbgrid le matériel id et le nom et le prénom qui est affiché bel et bien mais moi je veux afficher le type du matériel et les informations qui le suit comme le numéro de série et la marque .

    comment je peux réglé les champs lié dans l'inspecteur des objets

    LookupDataSet :
    LookupKeyFields :
    LookupResultField :
    KeyFields :

    une petite explication serais super .

    un ami m'a déjà aider a relié le nom et le prénom de cette façon mais j'ai pas trop bien compris ce qu'il a fait j'ai essayer de copier ce qu'il a fait mais ça ne marche pas .

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    La première chose à faire aurait été de nous indiquer le SGBD et la description des tables et leur relations . Après cela un peu de lecture sur le SQL et en particulier les Jointures

    en utilisant une Query pour obtenir l'affichage dans une DBGRID
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // ici uniquement le matériel affecté
    SELECT <liste des champs a récupérer> 
    FROM materiel m join affectation f on m.ID_MATERIEL=f.ID_MATERIEL
                           join agent a on f.id_agent=a.id_agent
    Cette grille ne pourra cependant être qu'en lecture
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    La mise à jour de jointure est complexe,
    En BDE TUpdateSQL
    En ADO, tu as 'Unique Table', voir insert DBGrid avec TADOQuery et requete avec jointure
    ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour ,

    La première chose à faire aurait été de nous indiquer le SGBD et la description des tables et leur relations . Après cela un peu de lecture sur le SQL et en particulier les Jointures

    en utilisant une Query pour obtenir l'affichage dans une DBGRID
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // ici uniquement le matériel affecté
    SELECT <liste des champs a récupérer> 
    FROM materiel m join affectation f on m.ID_MATERIEL=f.ID_MATERIEL
                           join agent a on f.id_agent=a.id_agent
    Cette grille ne pourra cependant être qu'en lecture


    j'utilise firebird 2.5

    pour les tables :

    table : agent

    id_agent
    nom
    prenom
    service
    fonction

    table : materiels
    id_materiel
    type
    marque
    n_serie
    n_inventaire
    materiels ( nouveau champ crée qui rassemble les éléments marque n_serie et n_inventaire )


    table : affectation

    id_affectation
    date
    id_agent ( relié avec table agent )
    id_materiel (relié avec table matériels)
    nom_prenom ( qui regroupe nom et prénom de la table agent )
    materiels ( je ne sais pas comment le relié depuis la table matériels )

    c'est ça normalement

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par coolirc Voir le message
    table : affectation

    id_affectation
    date
    id_agent ( relié avec table agent )
    id_materiel (relié avec table matériels)
    nom_prenom ( qui regroupe nom et prénom de la table agent )
    materiels ( je ne sais pas comment le relié depuis la table matériels )
    ces deux champs
    nom_prenom ( qui regroupe nom et prénom de la table agent )
    materiels ( je ne sais pas comment le relié depuis la table matériels )
    sont inutiles

    materiels ( nouveau champ crée qui rassemble les éléments marque n_serie et n_inventaire )
    ce dernier peut être un champ calculé computed by

    pour obtenir ce que tu as demandé mon SQL était 'presque' correct

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT f.id_affectation,f.date,
    a.nom||' '||a.prenom as Agent,
    f.id_materiel,
    m.type
    m.marque
    m.n_serie||'-'||m.n_inventaire as num_materiel
    FROM affectation f join materiels m  ON f.ID_MATERIEL=m.ID_MATERIEL
                             JOIN agent a ON f.id_agent=a.id_agent
    devrait donner les bonnes informations (à contrôler par exemple avec flamerobin)

    ensuite pour un programme tout va dépendre de l'IHM (saisie dans une grid, saisie par fiche) et des composants de connexion utilisé
    déjà cité par ShaiLeTroll
    BDE <-- à éviter
    ADO
    ZEOSDBO
    Firedac (selon version DELPHI ?)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    ces deux champs
    nom_prenom ( qui regroupe nom et prénom de la table agent )
    materiels ( je ne sais pas comment le relié depuis la table matériels )
    sont inutiles

    materiels ( nouveau champ crée qui rassemble les éléments marque n_serie et n_inventaire )
    ce dernier peut être un champ calculé computed by

    pour obtenir ce que tu as demandé mon SQL était 'presque' correct

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT f.id_affectation,f.date,
    a.nom||' '||a.prenom as Agent,
    f.id_materiel,
    m.type
    m.marque
    m.n_serie||'-'||m.n_inventaire as num_materiel
    FROM affectation f join materiels m  ON f.ID_MATERIEL=m.ID_MATERIEL
                             JOIN agent a ON f.id_agent=a.id_agent
    devrait donner les bonnes informations (à contrôler par exemple avec flamerobin)

    ensuite pour un programme tout va dépendre de l'IHM (saisie dans une grid, saisie par fiche) et des composants de connexion utilisé
    déjà cité par ShaiLeTroll
    BDE <-- à éviter
    ADO
    ZEOSDBO
    Firedac (selon version DELPHI ?)

    Merci de votre réponse je n'ai pas encore essayer le sql mais vu que je suis débutant est ce qu'il faut l'utiliser avec un query ou bien ... ?

    sinon j'utilise IBExpert et les composants de connection TIBCConnection et TIBCTransaction et TIBCtable et TIBCdatasource

    delphi 7 entreprise.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Pas la peine de re-citer à chaque fois les messages (sauf sur les points importants)

    Je vous conseille fortement d'utiliser le SQL (bien sur avec des querys) il y a de très bon cours a ce sujet sur le forum ici plus vous avancerez dans l'utilisation d'une SGBD plus vous en aurez besoin

    Pour ce qui est d'IBExpert , avec les versions Firebird 2.1 et plus , il est moins recommandé (ces composants fonctionnent bien pour les opérations de base , je vous rassure) . le seul reproche que je ferais a ces derniers est surtout d'avoir a utiliser gds32.dll au lieu du Fbclient.dll (ou FBembed.dll)

    Comme vous débutez je vous conseille vraiment les ZEOSDBO (composants gratuits multi SGBD) voir ici ce que j'indique a un autre "forumeur"

    peu de différence avec les IBExpert , vous aurez un TZConnection,TZTransaction,TZTable, TZQuery , mais aussi un TZReadOnlyQuery , un TZUpdate (à relier a un TZQuery) etc....
    mais vous utiliserez un Tdatasource 'ordinaire' au lieu d'un TIBClientDataset
    et surtout , selon le protocole de connection vous pourrez vous connecter aussi bien a une base Firebird classique (client/serveur) qu'a une Embedded
    voire même un autre type de SGBD
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [AC-2010] Affecter valeur pour le champ d'une table
    Par myrddin99 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/05/2012, 04h57
  2. Affectation d'un champ d'une table à une variable vb
    Par wChris79 dans le forum VB.NET
    Réponses: 3
    Dernier message: 31/08/2011, 20h44
  3. affecter les resultats d'une requête à un champs dans une table
    Par benoist.cardinal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/09/2008, 21h00
  4. Réponses: 2
    Dernier message: 04/06/2007, 13h45
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00

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