TSelectorConstraint (selector)

De Wiki1000
(Différences entre les versions)
 
(16 révisions intermédiaires par 3 utilisateurs sont masquées)
Ligne 1 : Ligne 1 :
{{latest}}
+
{{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
 
|-
 
|-
|[[Left (TSelectorConstraint)|Right]]
+
|[[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:TObject;
+
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:TObject;
+
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:TObject;
+
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:TObject;
+
var selB:TSelector; obj:TSelectorConstraint;
 
begin
 
begin
 
   selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]);
 
   selB := ClassB.CreateSelector('unCodeB=%1','unCodeB',True,[iCodeB]);
 
   obj  := selB.AddConstraint(nil, 'ClassA','refB','oid','',[]);
 
   obj  := selB.AddConstraint(nil, 'ClassA','refB','oid','',[]);
   obj  := selB.AddConstraint(nil, 'ClassA2','refB','oid','(AliasOf(''ClassA'',''unCodeA'')=unCodeA) and (unCodeA=%1)',[iCodeA]);
+
   obj  := selB.AddConstraint(nil, 'ClassA2','refB','oid','(AliasOf(''ClassA'',''unCodeA'')=unCodeA2) and (unCodeA2=%1)',[iCodeA]);
 
   Result := selB.Count;
 
   Result := selB.Count;
 
end;
 
end;
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:TObject;
+
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:TObject;
+
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'')=unCodeA',[]);
+
   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'],['ClassA2.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

version800-32x32.png

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

Selector constraint 1.jpg

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 :

Selecteur (tech)Développement DSM

Outils personnels