Nach ewigen probieren bin ich zu einer Variante gelangt die anscheinend funktioniert. Es ist mir allerdings ein totales Rätsel warum das so ist.
Delphi-Quellcode:
procedure TDataModule1.CopyDataSetToCDS(Source: TDataSet; var Dest: TClientDataSet; CloseSource: boolean);
var dsProvider: TDataSetProvider;
I: Integer;
a: Boolean;
begin
{GetText in der Source funktioniert nicht}
{Filter in der Source funktioniert}
dsProvider:=TDataSetProvider.Create(self);
try
dsProvider.DataSet:=Source;
a := Dest.Data = dsProvider.Data;
Dest.SetProvider(dsProvider);
Dest.Open;
finally FreeAndNil(dsProvider); end;
if CloseSource then Source.Close;
end;
end.
Wenn exakt an der Stelle oben im Code
a := Dest.Data = dsProvider.Data;
eingefügt wird, dann erhalte ich auch wie erwartet an folgender Stelle den Wert 17
a := cds1.RecordCount;
Allerdings, die zugefügte Codezeile ergibt keinen Sinn.
Dest.Data ist an der Stelle immer null, a wird immer False.
trotzdem passiert irgendwas, dass dazu führt, dass im cds aufeinmal alle Daten drin sind.
Ich könnte auch
Delphi-Quellcode:
if Dest.Data = dsProvider.Data then
begin
end;
ergänzen, das hat den selben positiven Effekt.
Ein Timingproblem scheint es nicht zu sein. Ich habe an der Stelle das Programm durch eine Schleife im Ablauf verzögert. Das hat nichts gebracht.
Tja, da weiß ich nicht weiter. Vermutlich fehlt irgendein Schritt mit dem Dest oder dem Provider, der durch die eingefügte Zeile im Hintergrund ausgelöst wird.
Viele Grüße und gute Nacht