Datenpaketen benutzerdefinierte Daten hinzufügen
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");
// …
}