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 :

Question sur SQLQuery


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut Question sur SQLQuery
    Bonjour,

    Sur mon application, à partir d'une DBGrid, j'ai un besoin, pour l'enregistrement en cours, d'afficher des données complémentaires, qui doivent être le plus actualisées possibles.
    Pour ces données complémentaires je pensais utiliser un SQLQuery connecté en permanence à la base. Par une configuration Maitre-esclave entre le dataset de la DBGrid et ce 2ndSQLQuery je vois en gros comment faire.
    Par contre je ne vois pas comment faire pour que le 2nd SQLquery ne contienne que les données de l'enregistrement courant de la DBGrid. Je voudrais éviter de fetcher des enregistrements, afin d'être sûr que ce que contient le 2nde SQLQuery est le reflet de la base de données

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    Dans une Relation Maitre-Détail c'est exactement ce que tu décris

    C'est très simple, pour un test rapide, deux TSimpleDataSet (SDS1 et SDS2), deux TDataSource (DS1 et DS2), deux DBGrids
    Tu relie au second TSimpleDataSet SDS2 comme MasterSource le DataSource DS1 du premier TSimpleDataSet SDS1
    tu indiques dans SDS2 le MasterFields d'un champ présent dans SDS1

    Pense que pour un DBGrid il faut utiliser TSimpleDataSet ou le trio TSQLQuery+TDataSetProvider+TClientDataSet

    Je n'en fait pas souvent, j'ai proposé cette technique à un collègue et récemment sur le forum, dans le Premier DataSet, il semble qu'il soit préférable de mettre le champ lié comme IndexFieldNames

    Dans le Second TSimpleDataSet, tu mes un SQL paramètre comme SELECT * FROM Table2 WHERE Table2.Champ = :ChampTruc
    ChampTruc est le MasterFields dans SDS2 et le IndexFieldNames dans SDS1

    A chaque déplacement dans SDS1 cela va fournir une nouvelle valeur pour ChampTruc et donc relancer la requête de SDS2
    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

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Ok pour le principe mais juste une petite correction
    Citation Envoyé par ShaiLeTroll Voir le message
    Dans le Second TSimpleDataSet, tu mes un SQL paramètre comme SELECT * FROM Table2 WHERE Table2.Champ = :ChampTrucChampTruc est le MasterFields dans SDS2 et le IndexFieldNames dans SDS1
    Dataset1
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from TableMaitre
    Dataset1
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from TableDetails
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dataset2.MasterSource := Datasource1; // celui de DataSet1 alimentant la DbGrid1
    DataSet2.MasterField := 'ColonneTableMaitre'; // Clé primaire TableMaitre
    DataSet2.IndexFieldNames := 'ColonneTableDetails'; // Clé étrangère TableDetails
    Dernière chose, Delphi propose des exemples dans le sous-répertoire d'installation demos\db\MastApp et demos\db\IbMastApp avec des dataset de type Table mais le principe reste le même...
    --
    Philippe.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    C'est génial, merci

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    @prat381, Pense à

    @Ph. B., en omettant le WHERE,
    pour Paradox, cela ne pose pas de problème, il utilise une sorte de Filter,
    pour un SGBD SQL, récupérer une table entière alors que l'on sait que l'on va Filtrer sur une valeur c'est un peu dommage en terme de performance !
    J'ai maintenu pendant 1 mois une application utilisant ce système sur 3 Query (sur 15 tables via jointure) en tout SQL BDE+Paradox, la migration ADO+Oracle a été surprenamment simple et efficace à part ce détail ORACLE même SQL lancé via BDE ou ODA = DataSet différent
    Une fois le passage de paramètre entre Master et Detail corrigé, cela fonctionnait normalement avec DS1 Master du Detail DS2, lui même Master de DS3 utilisé dans un TQuickRep
    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

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

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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