|
HOWTO Accueil
HOWTO développement Sashipa
ListForm avancé : Deux clefs étrangères référençant la même table.
Vous avez une table contenant deux clefs étrangères qui référencent toute deux la
même table. Dans un listForm, vous souhaitez afficher les informations référencées
par ces deux clefs étrangères, à la fois.
Voyons un exemple concret : nous avons des Personnes, chaque personne est
originaire d'un Pays et habite dans un Pays (le même ou non). Voici
le script SQL des tables (ici avec la syntaxe pour HSQL) :
CREATE TABLE Pays (
Id_Pays integer not null primary key,
Nom_Pays varchar(100) not null
);
CREATE TABLE Personne (
Id_Personne integer not null primary key,
Nom_Personne varchar(100) not null,
Prenom_Personne varchar(100),
Ref_Pays_Origine integer,
Ref_Pays_Habitant integer,
FOREIGN KEY (Ref_Pays_Origine) REFERENCES Pays (Id_Pays),
FOREIGN KEY (Ref_Pays_Habitant) REFERENCES Pays (Id_Pays)
);
|
La table Personne a ici deux clefs étrangères référençant la table Pays.
Dans la liste (le formulaire listForm) des personnes, nous voulons afficher le pays
d'origine et le pays d'habitation. Voici un exemple :
<listForm db='dbBaseGroupes' doubleClicScreen='SCtblPersonne' delete='yes'>
<title>Liste des Personnes</title>
<bounds x='10' y='10' w='700' h='500' />
<selectQueryBuilder type='list'>
<fromStatementBuilder>
<mainInstanceTable schemaTable='tblPersonne' />
<fkJoin join='left'>
<instanceFk schemaFk='fk_tblPersonne_tblPays_RefPaysOrigine' />
<referencedInstanceTable schemaTable='tblPays' nickName='paysOrig' />
</fkJoin>
<fkJoin join='left'>
<instanceFk schemaFk='fk_tblPersonne_tblPays_RefPaysHabitant' />
<referencedInstanceTable schemaTable='tblPays' nickName='paysHabit' />
</fkJoin>
</fromStatementBuilder>
</selectQueryBuilder>
<instanceColumnList>
<instanceColumn schemaColumn='tblPersonne_NomPersonne' />
<instanceColumn schemaColumn='tblPersonne_PrenomPersonne' />
<!-- Colonnes pays d'origine -->
<instanceColumn schemaColumn='tblPays_Nom'>
<title>Pays d'origine</title>
<instanceTable schemaTable='tblPays' nickName='paysOrig' />
</instanceColumn>
<!-- Colonnes pays d'habitation -->
<instanceColumn schemaColumn='tblPays_Nom'>
<title>Pays d'habitation</title>
<instanceTable schemaTable='tblPays' nickName='paysHabit' />
</instanceColumn>
</instanceColumnList>
<insertScreen screen='SCtblPersonne' />
</listForm>
|
Remarques :
On définit les deux jointures dans la requête selectQueryBuilder. Deux
instances de la table référencée sont nécessaires, on leur donne donc deux
surnoms différents (nickName.
Lors de la déclaration de la colonne, on spécifie un titre explicite. Autrement
on verrait apparaître deux fois le titre de la schemaColumn, ce qui porterait à
confusion.
On spécifie à quelle instance de table appartient la colonne. La première
colonne tblPays_Nom fait partie de l'instance de table paysOrig
et la deuxième fait partie de l'instance de table paysHabit.
Top
© Copyright 2003 Sashipa-Melba Team.
Ce document de la technologie Sashipa-Melba est
sous licence GNU FDL Vous
pouvez le copier et modifier librement les copies tant que cette mention apparaît clairement.
|