Index multiple

Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023 - 8 janv. 2007 à 11:42
Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023 - 16 janv. 2007 à 12:31
salut , je debute dans la programmation , j'ai un ptit pbm concernant la création d'un index multiple (expression index) sous dbase , lors de la sauvegarde de  la table avec le nouvel index j'ai le message d'erreur " descripteur d'index incorrect"


merci pour l'aide a+

6 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
8 janv. 2007 à 15:02
Salut,

pour pouvoir t'aider, il nous faudrait ton expression index...

Thierry
0
Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023
8 janv. 2007 à 19:19
Merci




Thierry je vous remercie pour avoir répondu à  ma premiere question sur ce forum.

c'est trés sympa.



comme je l'ai fait dêja savoir , je débute dans la programmation ,et je vient de rencontrer un petit problème.


voila


j'ai 3 table table1 table2 et table3


pour pouvoir enregistrer des donnée:


 


La table1 renferme l'enregistrement des élèves


La table2 renferme les enregistrements des type de cours


La table3 renferme les seances prises par un éleve pour un type de cours bien defini.


comment faire la relation entre les 3 tables ?

j'ai mis dans la proprieté master source de la table2 datasource1qui est reliée à la table1


cela marche bien.


mais cela se gate quand je fait relier la table3 en mettant sa proprieté master source a datasource2 qui est relier à la table2


cela ne marche pas bien ,j'ai pensé qu'il falai mettre un index multiple (expresion index pour mettre plusieurs champs en index)


dans lequel je choisi les champs( élève+cour+seance) , jobtient une fenetre qui me demande de saisir un (index tag name)


je saisi un nom et je fait OK il accepte ,mais au moment oû j'essai d'enregistrer la table3 avec le nouvel index j'obtient un messge d'erreur <<< descripteur d'index incorrect>>>.


merci pour votre aide


A+
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 janv. 2007 à 16:09
Salut,

Avec un fichier DBase, un index sur plusieurs champs doit se faire sous la forme : "ELEVE+COURS+SEANCE" , c'est à dire une expression d'index.
Ceci, placé dans la zone expression d'index de l'outil Delphi 'Module Base de données' ne devrait provoquer aucune erreur.

 Mais il est impossible avec ce genre d'index d'affecter une relation table maître/détail, puisque il faut faire une relation entre 1 champ de la table maître et 1 champ de la table détail, mais ici nous n'avons pas un "champ" indexé, mais une expression d'index.

Table1 = les élèves : donc 1 seul champ suffit : ELEVE. Index sur ce champ.

Table2 = les cours. Mais comme tu as établi avec succès une relation avec la table1, tu l'as fait sur base du champ Eleve. Donc dans table2, tu as comme enregistrements :
Dupuis/Math, Dupuis/ Histoire, Legrand/Math...  Chose que je ne ferais pas : la table2 ne devrait que renseigner les cours, sans s'occuper des élèves (donc un champ Cours + index sur ce champ).

 Les tables 1 et 2 servent en fait de codes obligatoires pour le reste : un élève dans la table 3 doit se trouver dans la table1, un cours dans la table3 doit se trouver dans la table2...

Si tu as besoin de connaître les élèves inscrits à tels cours, il te faut une table 3 qui aura comme champs eleve et cours. Si tu l'indexes sur 'eleve', tu pourras établir une relation avec la table1. Si tu l'indexes sur 'cours', tu pourras établir une relation avec la table2.

La table 4 reprend les champs eleve,cours,seance + autres infos. Index sur les 3 premiers champs.
Pas de déclaration de relation avec les autres tables. Les informations obtenues dans le dbgrid lié à cette table seront obtenues par filtre des données. Très simple en utilisant l'événement OnFilterRecord :

procedure TForm1.Table4FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin     Accept: ((Table4.FieldByName('ELEVE').asString Table3.FieldByName('ELEVE').asString) and
             (Table4.FieldByName('COURS').asString = Table3.FieldByName('COURS').asString));
end;

Pour activer le filtre, la propriété Filtered doit être true. Donc, le plus simple, deux boutons:

procedure TForm1.FiltrerBtnClick(Sender: TObject);
begin
   Table4.Filtered: = true;
end;

procedure TForm1.SupprimerFiltreBtnClick(Sender: TObject);
begin
  Table4.Filtered:= false;
end;  

Donc tu te ballades dans le dbgrid lié à la table3,  clic sur filtrer et les infos obtenues ne concerneront que l'élève x et le cours y.

Remarque : il y a moyen de coder différemment le filtre pour avoir toutes les séances de tel élève (pour tous les cours) ou toutes les séances de tel cours (pour tous les élèves).

Je ne sais pas si j'ai été très clair. Aussi n'hésite pas...

A +
Thierry    
0
Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023
9 janv. 2007 à 19:04
Merci




Thierry 
Jevais essayer de déquortiquer votre réponse pour bien comprendre ,et faire un essai ,
je vous dirai le résultat par la suite ,
encore merci ,
A+
0

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

Posez votre question
Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023
15 janv. 2007 à 16:58
salut Thierry


j'ai bien décortiquer votre  réponse qui m'a vraiment aider ,c'est simple vous m'avez tout simplement (et avec peu de code) mis sur le bon chemin.
encore merci.
pour l'index:
Tout à fait  Thiery , l'expression index passe trés bien en rajoutant les + entre chaque index .


*pour mon problème d'enregistrement sur la table3 des séances tout en voulant avoir dans mon dbgrid {qui est lui même relier à la table3(seances)} l'affichage des ( num_eleve , num_cours ,et num_seance ). 
        *Pour enregitrer les seances d'un (élève N° ..n ), en relation avec un( cours N°..n ), j'ai coder comme suite:


NB: la table2 (cours) c'est une table qui enregistre des numero de cours qui s'ajoutent au fûr et à mesure que l'élève en demande((le type de cours, est comme vous me l'aviez dit,  n'intervient pas dans les enregistrements)).


j'ai relier la table2 (cours) à la table1(élève).<<maitre detail>>  pour faire le lien entre num_eleve et num_ cours.
et j'ai relier la table3(seances) à la table2(cours).<<maitre detail>> pour  afficher     les num_cours dand le dbgrid {qui est relier à la table3 }et faire  le lien avec les seances..


procedure TForm1.nouvelle_seanceClick(Sender: TObject);
begin
        table3.Edit;
        table3.Append;
        table3.FieldValues['num_seance']:=table3.RecordCount+1;
        table3.FieldValues['num_eleve']:=table1.FieldValues['num_eleve'];  // pour afficher le num_eleve dans le dbgrid relier à la table3


** donc avec le premier élève tout marche trés bien.
 ** seulement pour les autres élèves, à chaque fois que je veut donner une nouvelle séance au cour N°n  de l'élève N°n cela se gate.
 Je pense que cela arrive parceque je ne suis pas encore arriver a lier les trois tables en même temps pour qu'à chaque fois, que je change le num_eleve
il ya changement dans les num_cours et dans les num_seances.
////je sais qu'il ya  une solution quelque part certe, mais il va faloir me doter de patience, j'en ai pas mal ,j'espère.
cher Thiery j'espere être un bon élève à ceux qui savent bien aider autrui!!!!!
merci encore .
0
Eros2007 Messages postés 36 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 16 avril 2023
16 janv. 2007 à 12:31
salut thierry
avez vous vu le 2ieme volet de mon probleme ?
si oui ! auriez vous un idée a me proposer ?
j'attend votre réponse
merci!
A+
0
Rejoignez-nous