« TSelectorConstraint (selector) » : différence entre les versions
(Page créée avec « <source lang='delphi'>TSelectorConstraint:TObject;</source> Cet objet matérialise une contrainte posée sur un sélecteur. ===Attributs=== {|class="wikitable" |- !Attr... ») |
Aucun résumé des modifications |
||
(17 versions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{Version800}} | |||
<source lang='delphi'>TSelectorConstraint:TObject;</source> | <source lang='delphi'>TSelectorConstraint:TObject;</source> | ||
Cet objet matérialise une contrainte posée sur un sélecteur. | 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=== | ===Attributs=== | ||
Ligne 9 : | Ligne 19 : | ||
!Attribut | !Attribut | ||
!Usage | !Usage | ||
|- | |||
|[[Name (TSelectorConstraint)|Name]] | |||
|Nom de la contrainte | |||
|- | |- | ||
|[[Parent (TSelectorConstraint)|Parent]] | |[[Parent (TSelectorConstraint)|Parent]] | ||
Ligne 19 : | Ligne 32 : | ||
|Nom de l'attribut gauche | |Nom de l'attribut gauche | ||
|- | |- | ||
|[[ | |[[Right (TSelectorConstraint)|Right]] | ||
|Nom de l'attribut droit | |Nom de l'attribut droit | ||
|- | |- | ||
Ligne 38 : | Ligne 51 : | ||
!Méthode | !Méthode | ||
!Usage | !Usage | ||
|- | |||
|[[AliasOf (TSelectorConstraint)|AliasOf]] | |||
|Retourne la colonne préfixée d'un attribut de la classe de la contrainte | |||
|- | |- | ||
|[[Delete (TSelectorConstraint)|Delete]] | |[[Delete (TSelectorConstraint)|Delete]] | ||
|Supprime la contrainte | |Supprime la contrainte | ||
|} | |} | ||
===Exemples d'utilisation de contrainte=== | |||
[[image:selector_constraint_1.jpg]] | |||
'''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> | |||
Ligne 47 : | Ligne 164 : | ||
* [[AddConstraint (selector)|Ajouter une contrainte]] | * [[AddConstraint (selector)|Ajouter une contrainte]] | ||
* [[AliasOf (exp)|AliasOf]] | |||
{{Footer|Selecteur (tech)}} | {{Footer|Selecteur (tech)}} | ||
[[category:Sélecteur]] | [[category:Sélecteur]] | ||
[[Category:Version800]] |
Dernière version du 12 février 2018 à 09:29
{{#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 —
}}