TSelectorConstraint (selector)
De Wiki1000
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 :