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 :

champ référence dans une app queryonly


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut champ référence dans une app queryonly
    Salut
    débutant enfin pas tout a fait, récemment j'était sur paradox et access, et j'ai migré et je nage en plein firebird !
    mais il ayant conservé de mauvaises habitudes, je n'utilise que des TTables, et on m'a dit que j'était en train de faire le con et qu'il fallait penser aux TQuery ... OK
    J'ai commencé a utiliser les TQUery mais je me retrouve face à un probleme :
    Le champ référence,
    par exemple en utilisant les tables, j'avais une table produit dans le champ IDFAM pointe vers le champ NOM de la table familles.. pour afficher la famille dans la table produits !
    Et la j'ai supprimé les tables et remplacé avec des TQUery, j'ai crée le champ référence du QRPRODUIT vers la QRFAMILLE tou t marche mais il y'a un hic :
    Il faut que le QUERY familles soit actif si on veut que le champ Famile dans la table produit apparaisse ????? faudrait il a chaque fois que je fasse une opération sur la table (query) produit j'appelle un OPEN du query de la table familles ????

    Voila mon messsage est trop long pour une petite question mais je voulais etre le plus clair possible ... Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Pas besoin de créer des champs de références, pense plutôt a faire une jointure entre les deux tables.

    Select * From Produit, Famille Where Produit.Id_fam = Famille.ID

  3. #3
    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 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Effectivement il faut utiliser les jointures mais avec de bonnes habitudes

    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From Produit, Famille Where Produit.Id_fam = Famille.ID
    préfères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From Produit JOIN famille ON Produit.Id_fam = Famille.ID
    à '*' préfères une liste des champs nécessaires

    et lis, relis les tutoriaux sur le SQL en voici un florilège
    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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    Bonjour
    Merci pour vos reponses mais je pense que vous n'avez pas compris ma question :
    Je ne veut pas sélectionnér les enregistrements d'une seule famille !!!
    pas de select * from produits where idfam=famille.idx

    Je parle des champs référence, je veut faire afficher dans le GRID de la table produits un champ 'NOM FAMILLE" qui n'y est pas donc une référence de la table famille j'ai dis comment faire pour utiliser un champ référence en n'utilisant que des query ??? doit on ouvrir le query familes achaque fois que je veuille l'afficher par exemple (PS j'ai reformulé la demande avec lexemple du dbgrid parceque c'est plus .clair ..)

  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 sandokhane Voir le message
    Pas besoin de créer des champs de références, pense plutôt a faire une jointure entre les deux tables.
    +10000
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    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 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par NorexaMS Voir le message
    Merci pour vos réponses mais je pense que vous n'avez pas compris ma question :
    Je ne veut pas sélectionner les enregistrements d'une seule famille !!!
    pas de select * from produits where idfam=famille.idx
    au contraire , c'est toi qui lit mal les réponses , la ", famille" n'est pas un erreur de la part de sandokhane et cela change tout le SQL. C'est également pour cela que je préfère mettre JOIN plutôt qu'un simple virgule
    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

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Citation Envoyé par sandokhane Voir le message
    Pas besoin de créer des champs de références, pense plutôt a faire une jointure entre les deux tables.
    NorexaMS,

    Ce n'est pas forcément la meilleure solution, notamment si le résultat de la requête doit être affiché et modifiable dans une IHM (une fiche..), en effet dans ce cas seule la référence de produit devra être récupérée, une requête préalablement ouverte sur la table des produits te permettra de définir ton champ référence comme avec les composants TTable, le principe est toujours le même.

    Si tu n'es pas trop avancé dans tes travaux, essaie d'éviter les composants basés sur le BDE (TTable, TQuery, TDatabase...) pour attaquer des SGBD SQL tels que Firebird, le BDE est condamné voire déjà mort, c'est donc un risque en termes de pérennité. Il existe des composants spécialisés dédiés Firebird (IDBExpress) ou les composants DBEXpress en standard dans Delphi.

    La suite ZEOS permet aussi d'accéder à une base FB mais ne sont pas dédiés à celle-ci. Personnellement, je ne les ai pas testé.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2011, 10h05
  2. Réponses: 0
    Dernier message: 19/05/2009, 14h32
  3. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Remplir et relire un champ Memo dans une BD Access.
    Par Maitre Kanter dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 22h51

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