Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Bases de données
Bases de données Vos questions concernant les bases de données (BDE, Access, SqlServer...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/12/2012, 15h39   #1
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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.
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 16h56   #2
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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 :
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 16h58   #3
jeromelef2
Invité régulier
 
Homme
Développeur informatique
Inscription : août 2012
Messages : 9
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 : 9
Points : 9
Points : 9
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 )
jeromelef2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 19h23   #4
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 13h23   #5
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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 :
    ADOQuery1.SQL.Text :=  'select ID_CONC, NOM_CONC, VILLE_CONC from CONCESSIONNAIRES where ID_MARQUE = :Id';
  2. 2°) table2 : marques
    ADOQuery2 => DataSource2 => DBGrid2
    Code :
    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 :
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 :
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 12h04   #6
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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.
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 19h15   #7
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 21h23   #8
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
bonsoir
voila ce que j'ai pu faire
merci encore.
Images attachées
Type de fichier : jpg application.JPG (63,0 Ko, 21 affichages)
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 23h01   #9
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 11h26   #10
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
Bonjour
je vous remercie bien vivement
voilà je vous fait part de l'unit1
merci encore pour votre aide
Images attachées
Type de fichier : jpg application2.JPG (77,5 Ko, 10 affichages)
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 12h34   #11
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 14h15   #12
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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
Type de fichier : rar master-detail.rar (748,5 Ko, 7 affichages)
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 18h06   #13
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
Par défaut Bonne année 2013

Bonsoir à toute l'équipe.
Images attachées
Type de fichier : jpg voeux 2013.JPG (28,4 Ko, 7 affichages)
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 23h06   #14
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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
Type de fichier : zip master-detail.zip (2,8 Ko, 12 affichages)
__________________
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 12h15   #15
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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+
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 18h25   #16
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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.
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 19h24   #17
BuzzLeclaire
Membre Expert
 
Avatar de BuzzLeclaire
 
Homme
Dev/For/Vte/Ass
Inscription : août 2008
Messages : 1 499
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 499
Points : 1 059
Points : 1 059
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+
BuzzLeclaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 21h20   #18
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
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
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 11h40   #19
kasrimus
Invité de passage
 
Homme
retraité
Inscription : 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 : 0
Points : 0
Bonjour
pas de réponse?
questions restent ouvertes...! toujours
merci
kasrimus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 13h51   #20
Rayek
Modérateur
 
Avatar de Rayek
 
Homme
Développeur informatique
Inscription : mars 2005
Messages : 4 993
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
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 : 4 993
Points : 7 729
Points : 7 729
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 Combattez la brute
Aucune réponse aux sollicitations techniques par MP

Le guide du bon forumeur :__________
[Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3
Rayek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h08.


 
 
 
 
Partenaires

Hébergement Web