vegeta_356
Messages postés3Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 3 mai 2005
-
27 avril 2005 à 20:13
vegeta_356
Messages postés3Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 3 mai 2005
-
3 mai 2005 à 17:03
Bonjour !
Mon programme est celui d'une gestion de patients et des vaccins qu'ils
ont eu. La base de données comporte 3 tables: PATIENTS,
VACCINS_PATIENTS et VACCINS.
La table PATIENTS comporte un numéro généré automatiquement (PAT_NO) et les infos sur le patient.
La table VACCINS_PATIENTS comporte elle aussi un numéro automatique, un
champs pour la date de la vaccination, et deux champs contenant les clé
étrangères de la table PATIENTS et VACCINS (PAT_NO et VAC_NO)
La table VACCINS comporte seulement un numéro, et le nom du vaccin.
J'essaie de créer un rapport avec Quickreport, donnant le nom et prénom
du patient (et autres infos) contenu dans une bande Détail, la date de
vaccination et le nom du vaccin correspondant dans la SubDetail. Il y a
3 objets IBTable et un datasource pour lier les tables.
Bon, et maintenant, mon problème:
Quand j'essaie de lier la table VACCINS aux autres, je peux pas car
elle est référencé au datasource, qui lui est référencé à la table
PATIENTS (IBTable1). Donc, je ne peux pas afficher le nom du vaccin
correspondant à la date de vaccination, et au patient. J'aimerais
savoir si c'est possible de régler ce problème là, ou que c'est
impossible avec QuickReport.
ada_azoul
Messages postés22Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention 8 juin 2005 28 avril 2005 à 09:47
Normalement vous vous travaillez avec Tquery
lieaison avec join lift ,right ou full
ensuite entreprendre un appelle dans ta qreport par uses
ensuite dépot des expression qreport
mais auparavant tu dois mettre (PAT_NO) dans les autres tables
vegeta_356
Messages postés3Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 3 mai 2005 28 avril 2005 à 17:12
Merci pour la réponse, mais bon... ça ne m'a pas dépanné pour ce problème, car de la façon dont la BD est monté, je ne peux pas ajouter un champs PAT_NO dans la table vaccins.
Mais suite à ta réponse, j'ai encore continuer et j'ai trouvé une alternative.
J'ai créé un deuxième datasource. Celui-ci pointe maintenant sur
l'objet IBTable de la table VACCINS_PATIENTS. Ensuite, j'ai fais
pointer mon IBTable de la table VACCINS sur le datasource nouvellement
créé et j'ai ajouté la contrainte du no (Propriété Masterfields).
Jme demande pq je n'y ai pas pensé avant...
Mais j'aimerais bien que tu m'éclaires sur ta méthode ad_azoul, j'ai pas tout compris de la première partie de ton message:
Normalement vous vous travaillez avec Tquery
lieaison avec join lift ,right ou full
ensuite entreprendre un appelle dans ta qreport par uses
ensuite dépot des expression qreport
ada_azoul
Messages postés22Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention 8 juin 2005 30 avril 2005 à 09:33
voici qlq chose en ce sens
//==================================
try
IBQuery_QREPORT.Close; // tu peux changer le nom de ton Query TABLE.Close; idem pour les autres
IBQuery_QREPORT.SQL.Clear;
IBQuery_QREPORT.SQL.Add(' select * from "'+table_PATIENT+'" TBPAT'+
' left OUTER JOIN "'+table_VACCIN+'" TB_VAC '+
' on (TBPAT.NUMERO=TB_VAC.NUMERO) '+
' left OUTER JOIN "'+table_AUTRE+'" TB_ATR '+
' on (TBPAT.NUMERO=ID_RG.NUMERO) '+'
' ORDER BY TBPAT.nom_pat '); // tri sur le nom ascendant exple
si tu ajoute un where voici le bloc
//======== debut bloc
' left OUTER JOIN "'+table_AUTRE+'" TB_ATR '+
' on (TBPAT.NUMERO=ID_RG.NUMERO) '+
' where TBPAT.NUMERO = '''+MON_NUMERO+''' '+
' ORDER BY TBPAT.nom_pat '); // tri sur le nom ascendant exple
//============ fin bloc
if not IBQuery_QREPORT.Prepared then
IBQuery_QREPORT.Prepare;
IBQuery_QREPORT.Open;
except
end;
//=============================
sinon il faut faire fontionner la table par un DataSource
de la table maitresse IBQuery_QREPORT.DataSource:=DS_VACCIN;
dans ces condition il faudrai aussi un autre TIBquery pour la 3eme table
tu pourrait aussi faire ça dans l'inspecteur d'objet directement
try
IBQuery_QREPORT.DataSource:=DS_VACCIN;
IBQuery_QREPORT.Close;
IBQuery_QREPORT.SQL.Clear;
IBQuery_QREPORT.SQL.Add(' SELECT * from "'+table_PATIENT+'" TBPAT'+
' left OUTER JOIN "'+table_VACCIN+'" TB_VAC '+
' on (NUMERO=TB_VAC.NUMERO) '+
' Where TBPAT.NUMERO = :NUMERO '+
' ORDER BY TBPAT.nom_pat ');
if not IBQuery_QREPORT.Prepared then
IBQuery_QREPORT.Prepare;
IBQuery_QREPORT.Open;
except
end;
//================ toute fois toi seul qui connait les combinaisons exactes
vegeta_356
Messages postés3Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention 3 mai 2005 3 mai 2005 à 17:03
Ok, mais ce code, c'est où tu l'insères, dans l'événement On Preview? ailleurs?
J'ai essayé de mettre en application cette méthode via seulement
l'inspecteur d'objet pour voir, mais on dirait qu'il y a seulement un
problème. Le query ne change pas d'enregistrement une fois terminé, il
fais seulement répété la première de sa liste en continu...
J'ai aussi essayé de mettre des objets IBTable, pour que le table
change les enregistrements, et je les ai relié par un datasource aux
querys, mais aucun succès.