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 :

filtre avec adoquery


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut filtre avec adoquery
    Bonsoir
    svp, comment peut-ton filtrer une base données avec adoquery.
    ayant 02 tables [access 2007],
    table1 : concessionnaire
    table2 : marques
    avec 02 dbgrid [marques] dbgrid [concessionnaires]
    ce que je souhaiterais faire c'est quand je sélectionne une marque dans dbgrid [marques] tous les concessionnaires commercialisant la marque sélectionnée seront affichés dans la dbgrid [concessionnaires]
    comment faire svp
    merci pour compréhension.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par kasrimus Voir le message
    svp, comment peut-ton filtrer une base données avec adoquery.
    ayant 02 tables [access 2007],
    table1 : concessionnaire
    table2 : marques
    avec 02 dbgrid [marques] dbgrid [concessionnaires]
    ce que je souhaiterais faire c'est quand je sélectionne une marque dans dbgrid [marques] tous les concessionnaires commercialisant la marque sélectionnée seront affichés dans la dbgrid [concessionnaires]
    Il s'agit d'une relation Maître Détails. Il faut paramétrer les 2 ensembles de données associés aux grilles de manières adéquates, en jouant sur les propriétés MasterSource, MasterFields de l'ensemble détails quand il s'agit de TADOTable.
    Pour des TADOQuery, il faut utiliser l'événement AfterScroll du 1° query. il est déclenché à chaque déplacement dans l'ensemble. Dans la procédure appelée par cet événement, il faut réactualiser le second query en changeant le paramètre correspondant à l'id qui sert de clé étrangère...
    Attention, ne pas oublier de désactiver l'événement lors du chargement du 1° query et de le réactiver après le chargement pour éviter des rafraichissements inutiles et couteux en ressources pour le 2° query.
    Rapidement, cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      // Débrancher l'événement
      ADOQuery1.AfterScroll := nil;
      // Ouvrir l'ensemble de données
      ADOQuery1.Open;
      // Rebrancher l'événement
      ADOQuery1.AfterScroll := ADOQuery1AfterScroll;
      // Appeler le gestionnaire d'événement pour réactualiser le 2° ensemble
      ADOQuery1AfterScroll(nil);
    Philippe.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Points : 159
    Points
    159
    Par défaut
    bonjour,

    une piste : avec l’événement on change du datasource (lié au tadoquery et à la grille).
    mais attention : il me semble que cet événement est aussi appelé lors du chargement de la grille (prevoir soit un boolean d'initialisation ou de jouer avec l'affectation de l'evenement )

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonsoir
    merci pour la réponse
    sincèrement, j'ai rien pigé chose qui m'échappe totalement.
    sans trop demander plus de précisions svp.
    merci

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par kasrimus Voir le message
    sincèrement, j'ai rien pigé chose qui m'échappe totalement.
    Quel point vous a échappé ?

    En attendant je complète ce que j'ai dit concernant les TADOQuery (les instructions SQL devront être adaptées).
    1. 1°) table1 : concessionnaire : les composants
      ADOQuery1 => DataSource1 => DBGrid1
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ADOQuery1.SQL.Text :=  'select ID_CONC, NOM_CONC, VILLE_CONC from CONCESSIONNAIRES where ID_MARQUE = :Id';
    2. 2°) table2 : marques
      ADOQuery2 => DataSource2 => DBGrid2
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ADOQuery2.SQL.Text :=  'select ID_MARQUE, NOM_MARQUE from MARQUES';

    Pour le composant ADOQuery2, on va créer un gestionnaire d'événement pour l'événement AfterScroll. On aura :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.ADOQuery2AfterScroll(DataSet: TDataSet);
    begin
      // Fermeture de la requête des concessionnaires
      ADOQuery1.Close;
      // On change le paramètre (=la marque)
      ADOQuery1.Parameters.ParamByName('Id').Value := ADOQuery2.FieldValues['ID_MARQUE'];
      // Ouverture de la requête avec le nouveau paramètre
      ADOQuery1.Open;
    end;
    Comme je le disais précédemment, pour éviter d'appeler le gestionnaire d'événement plusieurs fois lors de l'ouverture de ADOQuery2, on va écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Débrancher l'événement
    ADOQuery2.AfterScroll := nil;
    // Ouvrir l'ensemble de données
    ADOQuery2.Open;
    // Rebrancher l'événement
    ADOQuery2.AfterScroll := ADOQuery2AfterScroll;
    // Appeler le gestionnaire d'événement pour réactualiser ADOQuery1
    ADOQuery2AfterScroll(nil);
    Philippe.

  6. #6
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonjour
    merci pour votre réponse, j'ai testé ça n'a pas marché y a toujours un problème sans que cette fois-ci message d'erreur ??? est ce que je pourrais vous faire part de l'application svp pour un exemple bien concret
    merci encore.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par kasrimus Voir le message
    merci pour votre réponse, j'ai testé ça n'a pas marché y a toujours un problème sans que cette fois-ci message d'erreur ???
    Qu'est ce que cela donne en traçant pas à pas le code ?
    Citation Envoyé par kasrimus Voir le message
    est ce que je pourrais vous faire part de l'application svp pour un exemple bien concret
    Publiez juste l'unité de la fiche (TForm) où se trouvent les grilles (DBGrid), voire l'unité du module de données (TDatamodule) associé...
    Philippe.

  8. #8
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    bonsoir
    voila ce que j'ai pu faire
    merci encore.
    Images attachées Images attachées  

  9. #9
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Oups, je me suis mal fait comprendre
    Citation Envoyé par Ph. B. Voir le message
    Publiez juste l'unité de la fiche (TForm) où se trouvent les grilles (DBGrid), voire l'unité du module de données (TDatamodule) associé...
    Je parlais du code source de l'unité de cette fiche...
    Philippe.

  10. #10
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonjour
    je vous remercie bien vivement
    voilà je vous fait part de l'unit1
    merci encore pour votre aide
    Images attachées Images attachées  

  11. #11
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par kasrimus Voir le message
    voilà je vous fait part de l'unit1
    Je voulais dire le fichier source de l'unité (unit1.pas si c'est le nom de l'unité), pas la capture d'écran...
    J'ai quand même vu que tout avait été mélangé...
    Il faut reprendre le code gestionnaire de l'événement AfterScroll tel que je vous l'ai donné...
    La 2° partie de code est à placer dans la procédure qui va réaliser l'ouverture de AdoQuery2, mais pas dans le code gestionnaire. La, vous avez introduit un appel récursif à la procédure ADOQuery2AfterScroll.
    Ce bout de code peut éventuellement se placer dans la procédure FormCreate ou dans un procédure qui est susceptible d'ouvrir et de ré-ouvrir ADOQuery2...
    Philippe.

  12. #12
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonsoir
    merci pour votre patience et surtout pour la compréhension à mon égard
    voilà je vous fait part code [zip]
    merci encore
    Fichiers attachés Fichiers attachés

  13. #13
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut Bonne année 2013
    Bonsoir à toute l'équipe.
    Images attachées Images attachées  

  14. #14
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonsoir,
    J'ai regardé le code. Voila la marche à suivre :
    1. Dans la base Access, il faut créer une colonne Codmarq dans la table concessionnaires de même type que celle de la table marque.
    2. Renseigner les valeurs de cette colonne pour chacune des lignes de la table.
    3. Reprendre l'unité Unit1 que j'ai modifiée en fonction de cet ajustement
      J'ai juste renommé certains composants pour plus de clarté et placé le code comme il le fallait...
    Fichiers attachés Fichiers attachés
    Philippe.

  15. #15
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonjour et joyeuse nouvelle année. Que du bonheur.
    mes sincères remerciements pour votre aide.
    au fait ce n'est pas ce que je voulais???
    quand je clique sur un nom de marque il me ressort pas l’ensemble des concessionnaires commercialisant la marque sélectionnée.

    ex: audi --> CONS1 - CONS3 - CONS10 - CONS21. dans dbgrid CONCESSIONNAIRES.
    merci quand même, je vais vous casser la tête éternellement.
    a+

  16. #16
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonsoir,
    pardon, il fallait lire "merci quand même, je vais pas vous casser la tête éternellement"
    merci encore
    si je peux me permettre c'est toujours sur adoquery. en l'absence
    de table adotable là ou il y a possibilité de lier par table grâce au master source, on est un perdu.
    ma question est : peut-on lier 4 tables (adoquery) svp
    merci encore.

  17. #17
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par kasrimus Voir le message
    ....
    ma question est : peut-on lier 4 tables (adoquery) svp
    merci encore.
    Bonsoir,

    Lier 4 tables et le termes ADOQUERY n'a pas de sens...

    ADOQUERY sert à l'établissement (l'execution) d'une requête SQL. avec une requête SQL tu peux effectivement lier beaucoup de tables entre elles mais quid des clés ?

    a+

  18. #18
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonsoir,
    c'est ce que je voulais savoir justement. y a une possibilité d'un exemple ou une adresse [site] svp ?
    merci encore pour le tout

  19. #19
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 87
    Points : 21
    Points
    21
    Par défaut
    Bonjour
    pas de réponse?
    questions restent ouvertes...! toujours
    merci

  20. #20
    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 kasrimus Voir le message
    Bonjour
    pas de réponse?
    questions restent ouvertes...! toujours
    merci
    Ce n'est pourtant pas dur d'aller sur le menu SGBD et de cliquer sur SGBD & SQL après il y a une section tutoriel qui te permettra de faire tes premiers pas en SQL pour lier tes 4 tables.
    Modérateur Delphi

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

Discussions similaires

  1. ADOQuery / Filtre avec sous requete
    Par tomy29 dans le forum Bases de données
    Réponses: 7
    Dernier message: 19/07/2007, 16h32
  2. Filtre Avec Password
    Par @rkane dans le forum Sécurité
    Réponses: 7
    Dernier message: 15/06/2006, 22h31
  3. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  4. Recherche et filtre avec un dynaset
    Par mat75019 dans le forum Access
    Réponses: 10
    Dernier message: 10/04/2006, 19h53
  5. problème Liaison ADOconnection avec AdoQuery
    Par Vodkha dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/09/2005, 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