Besten Dank für dein Feedback.
Ich habe eine kleine Demo gemacht und bekomme die gleichen Probleme wie vorher
Delphi-Quellcode:
unit DM;
interface
uses
System.SysUtils, System.Classes, Datasnap.Provider, Data.DB, Datasnap.DBClient;
type
TDataModule1 =
class(TDataModule)
cds1: TClientDataSet;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure testemal(ds : TDataSet);
procedure CopyDataSetToCDS(Source: TDataSet; Dest: TClientDataSet; CloseSource: boolean);
end;
var
DataModule1: TDataModule1;
implementation
{%CLASSGROUP 'System.Classes.TPersistent'}
{$R *.dfm}
procedure TDataModule1.testemal(ds : TDataSet);
var
a : Integer;
begin
a := ds.RecordCount;
// in a steht 17, das ist auch korrekt
DataModule1.CopyDataSetToCDS(
ds,
cds1,
false
);
a := cds1.RecordCount;
// in a steht 0. Der Übertrag hat nicht geklappt?!
end;
procedure TDataModule1.CopyDataSetToCDS(Source: TDataSet; Dest: TClientDataSet; CloseSource: boolean);
var dsProvider: TDataSetProvider;
begin
{GetText in der Source funktioniert nicht}
{Filter in der Source funktioniert}
dsProvider:=TDataSetProvider.Create(
nil);
try
dsProvider.DataSet:=Source;
Dest.SetProvider(dsProvider);
Dest.Open;
finally FreeAndNil(dsProvider);
end;
if CloseSource
then Source.Close;
end;
end.
Ich erwarte an der Stelle
a := cds1.RecordCount
das in a die gleiche Anzahl der Records enthalten ist, wie im dataset ds.
Habe ich hier irgendeinen Gedankenfehler?
Das ganze ist in einem Datamodul und die CDS liegt auf der Form.
Der Aufruf von testemal kommt von aussen, aber im dataset ds ist injedemfall Inhalt.
Es bleibt spannend