TSelectorConstraint (selector)
De Wiki1000
(Différences entre les versions)
(→Exemples d'utilisation de contrainte) |
|||
(14 révisions intermédiaires par 3 utilisateurs sont masqué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 10 : | Ligne 19 : | ||
!Attribut | !Attribut | ||
!Usage | !Usage | ||
+ | |- | ||
+ | |[[Name (TSelectorConstraint)|Name]] | ||
+ | |Nom de la contrainte | ||
|- | |- | ||
|[[Parent (TSelectorConstraint)|Parent]] | |[[Parent (TSelectorConstraint)|Parent]] | ||
Ligne 20 : | 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 39 : | 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]] | ||
Ligne 45 : | Ligne 60 : | ||
===Exemples d'utilisation de contrainte=== | ===Exemples d'utilisation de contrainte=== | ||
+ | |||
+ | [[image:selector_constraint_1.jpg]] | ||
'''Contrainte venant d'une référence''' | '''Contrainte venant d'une référence''' | ||
Ligne 50 : | Ligne 67 : | ||
<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]); | ||
Ligne 62 : | Ligne 79 : | ||
<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 selB:TSelector; obj: | + | var selB:TSelector; obj:TSelectorConstraint; |
begin | begin | ||
selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]); | selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]); | ||
Ligne 74 : | Ligne 91 : | ||
<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]); | ||
Ligne 87 : | Ligne 104 : | ||
<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 selB:TSelector; obj: | + | var selB:TSelector; obj:TSelectorConstraint; |
begin | begin | ||
selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]); | selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]); | ||
Ligne 100 : | Ligne 117 : | ||
<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]); | ||
Ligne 115 : | Ligne 132 : | ||
<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='C1' |
− | obj := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(''ClassA'',''unCodeA'')=unCodeA2',[]); | + | obj := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(''ClassA'',''unCodeA'')=unCodeA2',[]); // obj.Name='C2' |
withP long transaction do | withP long transaction do | ||
begin | begin | ||
− | Result := selA.Update(['unEntierA'],[' | + | Result := selA.Update(['unEntierA'],['C2.unEntierA2']); |
end; | end; | ||
end; | end; | ||
</source> | </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 : | Voir aussi : | ||
* [[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]] |
Version actuelle en date du 12 février 2018 à 10:29
TSelectorConstraint:TObject;
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
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;
Contrainte venant d'une référence inversée
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;
Contrainte en cascade
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;
Contrainte entre classes
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;
Mise à jour
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;
Mise à jour en utilisant un attribut de la contrainte
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;
Mise à jour en utilisant un attribut de la contrainte
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;
Voir aussi :