Ajouter des informations personnalisées aux paquets de données

De RAD Studio
Aller à : navigation, rechercher

Remonter à Contrôle des informations placées dans les paquets de données


Les fournisseurs d'ensembles de données peuvent ajouter dans des paquets de données des informations définies par l'application en utilisant l'événement Provider.OnGetDataSetProperties. Ces informations sont codées sous la forme d'un OleVariant et stockées sous le nom spécifié. Les ensembles de données client peuvent alors lire ces informations en utilisant leur méthode GetOptionalParam. Vous pouvez également spécifier que les informations doivent être placées dans les paquets delta envoyés par les ensembles de données client lors de la mise à jour des enregistrements. Dans ce cas, l'ensemble de données client peut ne jamais exploiter ces informations que le fournisseur s'envoie à lui-même.

Quand vous ajoutez des informations personnalisées dans l'événement OnGetDataSetProperties, chaque attribut individuel (appelé parfois un "paramètre facultatif") est spécifié en utilisant un tableau Variant contenant trois éléments : le nom (une chaîne), la valeur (un Variant) et un indicateur booléen indiquant si les informations doivent être placées dans les paquets delta lorsque le client applique les mises à jour. Ajoutez plusieurs attributs en créant un tableau Variant de tableaux Variant. Par exemple, le gestionnaire d'événement OnGetDataSetProperties suivant envoie deux valeurs : l'heure à laquelle les données ont été fournies et le nombre total d'enregistrements dans l'ensemble de données source. Seule l'heure à laquelle les données ont été fournies est renvoyée quand les ensembles de données client appliquent les mises à jour :

Delphi :

procedure TMyDataModule1.Provider1GetDataSetProperties(Sender: TObject; DataSet: TDataSet; out Properties: OleVariant);
begin
  Properties := VarArrayCreate([0,1], varVariant);
  Properties[0] := VarArrayOf(['TimeProvided', Now, True]);
  Properties[1] := VarArrayOf(['TableSize', DataSet.RecordCount, False]);
end;

C++ :

void __fastcall TMyDataModule1::Provider1GetDataSetProperties(TObject *Sender, TDataSet *DataSet, out OleVariant Properties)
{
  int ArrayBounds[2];
  ArrayBounds[0] = 0;
  ArrayBounds[1] = 1;
  Properties = VarArrayCreate(ArrayBounds, 1, varVariant);
  Variant values[3];
  values[0] = Variant("TimeProvided");
  values[1] = Variant(Now());
  values[2] = Variant(true);
  Properties[0] = VarArrayOf(values,2);
  values[0] = Variant("TableSize");
  values[1] = Variant(DataSet->RecordCount);
  values[2] = Variant(false);
  Properties[1] = VarArrayOf(values,2);
}

Quand l'ensemble de données client applique les mises à jour, l'heure à laquelle les enregistrements ont été initialement fournis peut être lue dans l'événement Provider.TDataSetProvider.OnUpdate du fournisseur :

Delphi :

procedure TMyDataModule1.Provider1UpdateData(Sender: TObject; DataSet: TCustomClientDataSet);
var
  WhenProvided: TDateTime;
begin
  WhenProvided := DataSet.GetOptionalParam('TimeProvided');
  // …
end;

C++ :

void __fastcall TMyDataModule1::Provider1UpdateData(TObject *Sender, TCustomClientDataSet *DataSet)
{
  Variant WhenProvided = DataSet->GetOptionalParam("TimeProvided");
  // …
}

Voir aussi