TSelectorConstraint (selector)
{{#images:version800-32x32.png|stock}}
<source lang='delphi'>TSelectorConstraint:TObject;</source>
Cet objet matérialise une contrainte posée sur un sélecteur.
Une contrainte permet de définir une jointure et de poser des conditions sur cette jointure.
Les contraintes sont particulièrement utiles si :
- La jointure est définie sur des éléments qui ne sont pas références
- La jointure est conditionnée
- La jointure est inversée
Attributs
| Attribut | Usage |
|---|---|
| Name | Nom de la contrainte |
| Parent | Objet parent de la contrainte |
| ClassName | Nom de la classe sur laquelle porte la sélection |
| Left | Nom de l'attribut gauche |
| Right | Nom de l'attribut droit |
| Where | Clause Where de la contrainte |
| ArgCount | Nombre d'arguments de la clause where |
| Args[] | Argument de la clause where |
Méthodes d'instance
| Méthode | Usage |
|---|---|
| AliasOf | Retourne la colonne préfixée d'un attribut de la classe de la contrainte |
| Delete | Supprime la contrainte |
Exemples d'utilisation de contrainte
Contrainte venant d'une référence
<source lang="delphi"> 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]);
Result := selA.Count;
end; </source>
Contrainte venant d'une référence inversée
<source lang="delphi"> function doSelector(const iCodeA:string; const iCodeB:string):Integer; var selB:TSelector; obj:TSelectorConstraint; begin
selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]);
obj := selB.AddConstraint(nil, 'ClassA','refB','oid','unCodeA=%1',[iCodeA]);
Result := selB.Count;
end; </source>
Contrainte en cascade
<source lang="delphi"> 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 := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(ClassA,unCodeA)=unCodeA',[]);
Result := selA.Count;
end; </source>
Contrainte entre classes
<source lang="delphi"> function doSelector(const iCodeA:string; const iCodeB:string):Integer; var selB:TSelector; obj:TSelectorConstraint; begin
selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]);
obj := selB.AddConstraint(nil, 'ClassA','refB','oid',,[]);
obj := selB.AddConstraint(nil, 'ClassA2','refB','oid','(AliasOf(ClassA,unCodeA)=unCodeA2) and (unCodeA2=%1)',[iCodeA]);
Result := selB.Count;
end; </source>
Mise à jour
<source lang="delphi"> 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]);
withP long transaction do
begin
Result := selA.Update(['unEntierA'],[0]);
end;
end; </source>
Mise à jour en utilisant un attribut de la contrainte
<source lang="delphi"> 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='C1'
obj := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(ClassA,unCodeA)=unCodeA2',[]); // obj.Name='C2'
withP long transaction do
begin
Result := selA.Update(['unEntierA'],['C2.unEntierA2']);
end;
end; </source>
Mise à jour en utilisant un attribut de la contrainte
<source lang="delphi"> function doSelector(const iCodeA:string; const iCodeB:string):Integer; var selA:TSelector; obj, obj2:TSelectorConstraint; begin
selA := ClassA.CreateSelector('unCodeA=%1','unCodeA',True,[iCodeA]);
obj := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]); // obj.Name='C1'
obj2 := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(ClassA,unCodeA)=unCodeA2',[]);
withP long transaction do
begin
Result := selA.Update(['unEntierA'],[obj2.name+'.unEntierA2']);
end;
end; </source>
Voir aussi :
{{#if:Selecteur (tech)|
{{#if:Selecteur (tech)|— Selecteur (tech) |}} — Développement DSM —
|
{{#if:|— [[{{{1}}}]] |}} — Développement DSM —
}}
