« TSelectorConstraint (selector) » : différence entre les versions

De Wiki1000
(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
|-
|-
|[[Left (TSelectorConstraint)|Right]]
|[[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

}}