DBGrid et Requêtes

vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009 - 29 déc. 2008 à 11:41
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009 - 4 janv. 2009 à 08:45
bonjour tout le monde ; et un special mon ami cantador ;
j'ai reglé les probleme précédemment posés , et là j'essai de filtrer un DBGrid avec un Query
et voisi la requette que j'ai construit avec le constructeur SQL du Conmposant query :

procedure TFGestExam.FiltrerClick(Sender: TObject);
begin
module.Cond_exam.SQL.Clear;
Module.Cond_exam.SQL.Add ('SELECT DISTINCT D.NUM_COND, D.NUM_CAT, D.COD_SEX, D.NOM_COND, D.PREN_COND, D.DAT_NAISS, D.DATCONDTR, D.DATDERNEXAM, D1.RESULTAT, D3.PRN_MONIT');
Module.Cond_exam.SQL.Add ('FROM ":AutoEcol:CONDIDAT.DB" D, ":AutoEcol:CONDIDAT A EXAMEN.DB" D1, ":AutoEcol:CONDIDAT A EXAMEN.DB" D2, ":AutoEcol:MONITEUR.DB" D3');Module.Cond_exam.SQL.Add ('WHERE (D1.NUM_COND D.NUM_COND) AND (D2.NUM_EXAM D1.NUM_EXAM)  AND (D3.NUM_MONIT = D.NUM_MONIT)');
Module.Cond_exam.SQL.Add ('ORDER BY D.NUM_COND, D.NUM_CAT, D.COD_SEX, D.NOM_COND, D.PREN_COND, D.DAT_NAISS, D.DATCONDTR, D.DATDERNEXAM, D1.RESULTAT, D3.PRN_MONIT');

Module.Cond_exam.Open;
Module.Cond_exam.Active:=True;

là en principe elle devrait me donner tout les enregistrements selectionnés sans exception puisque j'ai pas encore apliquer le filtrage par rapport au contenu d'un DBloockupComboBox.
mais je ne recois qu'un seul enregistrement , ce qui me laisse a penser que c'est le premier enregistrement de la table (table paradox).
enfin ! je ne sais pas trop , j'attend vos idées la decu.
merci d'avoir au la patience de me lire .

11 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 déc. 2008 à 21:37
WHERE (D1.NUM_COND = D.NUM_COND) AND (D2.NUM_EXAM = D1.NUM_EXAM)  AND (D3.NUM_MONIT = D.NUM_MONIT)

Ben, si un seul enregistrement répond aux conditions de la clause where, c'est normal.

ATTENTION : évites de mettre des espaces dans tes noms de tables, ça pourrait te poser de sérieux problèmes pour la suite. En règle générale, on utilise le caractère souligné "_" quand on veut vraiment faire ressortir les différentes parties du nom. Mais il faut vraiment le vouloir...



Attention 2 : les deux instructions suivantes sont strictement équivalentes :
Module.Cond_exam.Open;
Module.Cond_exam.Active:=True;

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
30 déc. 2008 à 09:26
merci pour la réponse delphiprog

c vraie ce que tu dis j'ai eu mes enregistrements enfin; merci beaucoup !

il me reste un autre soucis, je le pose ici , mais si ca nécessite je le poserai sous un autre sujet pour faire profiter les autres .
ben voila: maintenant que cette requette marche , j'utilise un DBComboBox qui m'affiche le nom du moniteur , et un DateTimePicker pour selectionner une date d'examen, donc je selectionne le moniteur puis une date d'examen , puis je clique sur un boutton pour avoir la requette precedante filtrée.
j'ai ajouter dans la clause
where .......and(D2.NUM_EXAMdat_Exam := datetimePicker.date);
mais je recois le message suivant : nom de champ incorrect : dat_exam
alors que j'ai bien verifier ce champ!
merci pour vos reponses .
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 déc. 2008 à 16:25
Pour les requêtes paramétrées, il faut utiliser = :
nomDuParametre et non pas, comme en pascal :=

La clause where devient donc :
where .......and (D2.NUM_EXAMdat_Exam = :maDate);
et, par conséquent , avant d'ouvrir la requête :
module.Cond_exam.SQL.paramByName['madate'].asDateTime =  datetimePicker.date;

NB : je ne sais plus si la propriété Date du composant TDateTimePicker est du type TDateTime. Je te laisse le soin de vérifier.

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 déc. 2008 à 16:27
oups !!!
Il faut lire
module.Cond_exam.SQL.paramByName['madate'].asDateTime  :=  datetimePicker.date;

au lieu de  :
module.Cond_exam.SQL.paramByName['madate'].asDateTime = 
datetimePicker.date;
Errare humanum est :(

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
31 déc. 2008 à 13:01
merci beaucoup delphiprog c'est tres gentil .

j'appliquerai et je te mettrai au courant !
 
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
1 janv. 2009 à 09:10
bonjour Delphiprog

j'ai appliquer ce que tu ma dis, mais ca ne marche pas !
voici la procedure exacte que j'ai appliquer :

procedure TFListCondidat.DBLookupComboBoxCloseUp(Sender: TObject);
begin
    Module.Qcondidat.SQL.Clear;
    Module.Qcondidat.SQL.Add('where D.NUM_MONIT =:DBLookupComboBox.text');
    Module.Qcondidat.ParamByName('DBLookupComboBox').AsString:=DBLookupComboBox.Text;
    Module.Qcondidat.Open;
end;

ou le DBLookupComboBox   recois le nom du moniteur a partire de la table moniteur.
et
D.NUM_MONIT  est le nom du champ de la table moniteur

je recois le message suivant : QCondidat : Parametre
'DBLookupComboBox' non trouver.

peut etre que j'ai mal interpreter ! j'en sais plus !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 janv. 2009 à 12:21
Aïe, aïe, aïe !!!!
Dans :
Module.Qcondidat.SQL.Clear;
Module.Qcondidat.SQL.Add('where D.NUM_MONIT =:DBLookupComboBox.text');

Où est passée le début de la requête (select...) ?

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
1 janv. 2009 à 14:19
bonjour delphiprog
et bien la requette elle meme est inserée dans la propriété SQL du Composant Query qui est (QCandidate), cette requette affiche tout les enregistrement sans exception.
et quand je voudrai filter avec le DBloockup, j'ai inseré ce code dans l'evenement OnCloseUp !!
apparrement j'ai fait n'importe quoi !!
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
3 janv. 2009 à 12:54
je suis toujour coincé les gars !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 janv. 2009 à 21:00
Dans ta première requête, l'objet TQuery se nommait
Cond_exam.
Dans la deuxième portion de code que tu as donnée, elle se nommait
Qcondidat.
Et là, tu nous parles de
QCandidate.
Comment veux-tu qu'on arrive à suivre et à y comprendre quelque chose.
Files nous les clés de ta maison, on va débarquer chez toi pour voir sur place si ça continue.
Moi, je sors.
Bonne continuation.



May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
4 janv. 2009 à 08:45
bonjour delphiprog
tu a raison pour cette remarque, c'est vrai en premier le query s'appelait Cond_exam, et je voulais paramétrer sur la date d'examen avec un datetimepicker.
là c'est la même chose, le query s'appelle Qcondidat, et je voulais parametrer sur le nom moniteur avec un DBLoockupComboBox.
en tout cas dans les deux cas ca ne marche pas. l'erreur est la meme il ne reconnais pas le nom des deux composant (  datetimepicker ou bien DBLoockupComboBox ).
s'il y'a encore d'autres clé de ma maison que vous n'avez pas encore !
je suis a votre disposition.
merci encore .
0
Rejoignez-nous