Update (selector)

De Wiki1000
(Différences entre les versions)
 
Ligne 47 : Ligne 47 :
 
</source>
 
</source>
  
'''Mise à jour d'un attribut d'une classe avec une valeur issu d'une contrainte'''
+
'''Mise à jour d'un attribut d'une classe avec une valeur issue d'une contrainte'''
  
 
Pour mettre à jour un attribut avec une valeur issue d'une colonne utilisez le nom de la colonne préfixé du nom de la table.
 
Pour mettre à jour un attribut avec une valeur issue d'une colonne utilisez le nom de la colonne préfixé du nom de la table.
Ligne 53 : Ligne 53 :
 
<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; c1,c2: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]);
+
   c1 := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]);
   obj := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(''ClassA'',''unCodeA'')=unCodeA',[]);
+
   c2 := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(''ClassA'',''unCodeA'')=unCodeA',[]);
 
   withP long transaction do
 
   withP long transaction do
 
   begin
 
   begin
     Result :=  selA.Update(['unEntierA'],['ClassA2.unEntierA']);
+
     Result :=  selA.Update(['unEntierA'],['C2.unEntierA']);
 
   end;
 
   end;
 
end;
 
end;

Version actuelle en date du 17 novembre 2016 à 16:00

function Update(const iUpdatePropNames:Array of string; const iUpdatePropValues:Array of variant):Integer;

Cette méthode met à jour les objets sélectionnés par le sélecteur

Paramètre Usage
Result Nombre d'objets affectés par l'opération
iUpdatePropNames Tableau de nom d'attribut devant être mis à jour dans la même opération
iUpdatePropValues Tableau de valeur pour les attributs mis à jour

Cette fonction retourne le nombre d'objets affectés par l'opération.

  • iUpdatePropnames,iUpdatePropValues
C'est deux tableaux doivent avoir le même nombre d'élément et doivent référencer des attributs de la classe du sélecteur
Tip-20px.png Tip : L'opération est effectué par un ordre SQL en mode auto commit, si une transaction longue est ouverte la session de la transaction longue est utilisée.

Exemple :

L'exemple suivant met à jour les objets de la classe ClassC pour lesquels unBool est faux.

Mise à jour d'attributs avec des constantes

function doUpdate(aDate:Tdatetime):Integer;
var sel:TSelector;
begin
  ClassManager.BeginLongTran(10,'ClassC');
  try
    sel := ClassC.CreateSelector('unBool=%1','unEntierC',True,[False]);
    Result := sel.Update(['unBool','uneDate'],[True,aDate]);
    ClassManager.CommitLongTran;
  except
  ClassManager.RollBackLongTran;
  raise
  end;
end;

Mise à jour d'un attribut d'une classe avec une valeur issue d'une contrainte

Pour mettre à jour un attribut avec une valeur issue d'une colonne utilisez le nom de la colonne préfixé du nom de la table.

function doSelector(const iCodeA:string; const iCodeB:string):Integer;
var selA:TSelector; c1,c2:TSelectorConstraint;
begin
  selA := ClassA.CreateSelector('unCodeA=%1','unCodeA',True,[iCodeA]);
  c1  := selA.AddConstraint(nil, 'ClassB','oid','refB','unCodeB=%1',[iCodeB]);
  c2  := selA.AddConstraint(obj, 'ClassA2','refB','oid','AliasOf(''ClassA'',''unCodeA'')=unCodeA',[]);
  withP long transaction do
   begin
     Result :=  selA.Update(['unEntierA'],['C2.unEntierA']);
   end;
end;


Voir aussi :

Selecteur (tech)Développement DSM

Outils personnels