AddConstraint (selector)
De Wiki1000
(Différences entre les versions)
m |
|||
(11 révisions intermédiaires par 2 utilisateurs sont masquées) | |||
Ligne 1 : | Ligne 1 : | ||
− | {{ | + | {{Version800}} |
− | + | ||
− | Cette méthode définit une contrainte | + | <source lang='delphi'>function AddConstraint(iParent:TSelectorConstraint; const iClassName:string; const iRightName:string; const iLeftName:string; const iWhere:string; const iArgs:Array of variant):TSelectorConstraint;</source> |
+ | |||
+ | Cette méthode définit une contrainte matérialisée par une jointure. | ||
{|class="wikitable" | {|class="wikitable" | ||
Ligne 10 : | Ligne 11 : | ||
|- | |- | ||
|Result | |Result | ||
− | |Un objet de type TSelectorConstraint matérialisant la contrainte | + | |Un objet de type [[TSelectorConstraint (selector)|TSelectorConstraint]] matérialisant la contrainte |
|- | |- | ||
|iParent | |iParent | ||
− | | | + | |Contrainte parente |
|- | |- | ||
|iClassName | |iClassName | ||
Ligne 32 : | Ligne 33 : | ||
*iParent | *iParent | ||
− | :Une contrainte | + | :Une contrainte parente matérialisant la classe de droite |
:nil pour faire porter la contrainte sur la classe du sélecteur | :nil pour faire porter la contrainte sur la classe du sélecteur | ||
Ligne 45 : | Ligne 46 : | ||
*iWhere | *iWhere | ||
− | :Clause where de la contrainte, la clause where est exprimée par rapport à la classe de la contrainte (iClassName) | + | :Clause where de la contrainte, la clause where est exprimée par rapport à la classe de la contrainte (iClassName). Les rôles NE sont pas évalués, il faut passer impérativement par [[AliasOf (exp)|AliasOf]] au besoin. Voir ci-dessous. |
*iArgs | *iArgs | ||
:Arguments de la contrainte | :Arguments de la contrainte | ||
+ | |||
+ | {{warning|Les clauses Where sur les jointures ne sont pas évaluées en objet, en général ces clauses correspondent à des filtres sur les relations. Ceci peut avoir un effet de bord lorsque le sélecteur est utilisé pour générer une liste, parce qu'il peut exister en mémoire des objets qui seront inclus dans le résultat malgré le fait que les conditions de jointures ne sont pas remplies. Pour éviter cet effet de bord, utilisez le sélecteur pour générer un curseur qui ne synchronise pas le résultat avec les objets en mémoire.}} | ||
Exemple : | Exemple : | ||
Ligne 54 : | Ligne 57 : | ||
<source lang="delphi"> | <source lang="delphi"> | ||
function doSelector(const iCodeA:string; const iCodeB:string):Integer; | function doSelector(const iCodeA:string; const iCodeB:string):Integer; | ||
− | var selA:TSelector; obj: | + | var selA:TSelector; obj:TSelectorConstraint; |
begin | begin | ||
selA := ClassA.CreateSelector('unCodeA=%1','unCodeA',True,[iCodeA]); | selA := ClassA.CreateSelector('unCodeA=%1','unCodeA',True,[iCodeA]); | ||
− | obj := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]); | + | obj := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]); // obj.Name='S1' |
Result := selA.Count; | Result := selA.Count; | ||
end; | end; | ||
Ligne 73 : | Ligne 76 : | ||
* [[TSelectorConstraint (selector)|Contrainte sur un sélecteur]] | * [[TSelectorConstraint (selector)|Contrainte sur un sélecteur]] | ||
+ | * [[AliasOf (exp)|AliasOf (expression)]] | ||
{{Footer|Selecteur (tech)}} | {{Footer|Selecteur (tech)}} | ||
[[category:Sélecteur]] | [[category:Sélecteur]] | ||
+ | [[Category:Version800]] |
Version actuelle en date du 14 mars 2019 à 16:39
function AddConstraint(iParent:TSelectorConstraint; const iClassName:string; const iRightName:string; const iLeftName:string; const iWhere:string; const iArgs:Array of variant):TSelectorConstraint;
Cette méthode définit une contrainte matérialisée par une jointure.
Paramètre | Usage |
---|---|
Result | Un objet de type TSelectorConstraint matérialisant la contrainte |
iParent | Contrainte parente |
iClassName | Classe liée |
iLeftName | Attribut gauche |
iRightName | Attribut droit |
iWhere | Clause Where de la jointure |
iArgs | Paramètres de la clause Where |
- iParent
- Une contrainte parente matérialisant la classe de droite
- nil pour faire porter la contrainte sur la classe du sélecteur
- iClassName
- Une classe sur laquelle porte la contrainte
- iLeftName
- Un attribut de la classe de la contrainte (iClassName) portant la contrainte
- iRightName
- Un attribut de la classe de droite, du parent ou du sélecteur, portant la contrainte
- iWhere
- Clause where de la contrainte, la clause where est exprimée par rapport à la classe de la contrainte (iClassName). Les rôles NE sont pas évalués, il faut passer impérativement par AliasOf au besoin. Voir ci-dessous.
- iArgs
- Arguments de la contrainte
Exemple :
function doSelector(const iCodeA:string; const iCodeB:string):Integer; var selA:TSelector; obj:TSelectorConstraint; begin selA := ClassA.CreateSelector('unCodeA=%1','unCodeA',True,[iCodeA]); obj := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]); // obj.Name='S1' Result := selA.Count; end;
Cette contrainte va générer le code SQL suivant :
select * from CLASSA t0 join CLASSB t1 on (t1.oid=t0.refB) and (unCodeB='iCodeB')
Voir aussi :