Datenpaketen benutzerdefinierte Daten hinzufügen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenpakete zusammenstellen


Mithilfe des Ereignisses Provider.OnGetDataSetProperties können Datenmengen-Provider den Datenpaketen anwendungsspezifische Daten hinzufügen. Diese Daten werden als OleVariant übergeben und unter einem von Ihnen angegebenen Namen abgelegt. Mithilfe der Methode GetOptionalParam können die Datenmengen der Client-Anwendung die Daten abrufen. Dabei können Sie auch festlegen, dass die Daten in die Delta-Pakete aufgenommen werden, welche die Client-Datenmenge sendet, wenn sie Datensätze aktualisiert. In diesem Fall erhält die Client-Datenmenge keine Kenntnis von den Daten, während der Provider die Möglichkeit hat, eine entsprechende Botschaft an sich selbst zu senden.

Wenn Sie in der Ereignisbehandlungsroutine für OnGetDataSetProperties benutzerdefinierte Daten hinzufügen, wird jedes einzelne Attribut (manchmal auch als optionaler Parameter bezeichnet) in einem Array vom Typ Variant angegeben, das drei Elemente enthält: den Namen (ein String), den Wert (ein Variant-Wert) und ein Boolesches Flag, das angibt, ob die Daten in Delta-Pakete aufgenommen werden, wenn der Client Aktualisierungen einträgt. Um mehrere Attribute hinzuzufügen, erstellen Sie ein Array des Typs Variant, das aus Arrays dieses Typs besteht. Die folgende Ereignisbehandlungsroutine für OnGetDataSetProperties sendet beispielsweise zwei Werte: den Zeitpunkt der Bereitstellung und die Gesamtzahl der Datensätze in der Ausgangsdatenmenge. Wenn Client-Datenmengen Aktualisierungen eintragen, wird nur der Zeitpunkt der Bereitstellung zurückgegeben.

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);
}

Wenn die Client-Datenmenge Aktualisierungen einträgt, kann der Zeitpunkt, zu dem die ursprünglichen Daten bereitgestellt wurden, in der Behandlungsroutine für das Ereignis Provider.OnUpdateData des Providers abgerufen werden:

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");
  // …
}

Siehe auch