Einzelnen Beitrag anzeigen

SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#3

AW: Dataset ADOQuery in ein Clientdataset kopieren

  Alt 6. Okt 2023, 19:10
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

Geändert von SusiT ( 6. Okt 2023 um 21:03 Uhr)
  Mit Zitat antworten Zitat