ich wollte nur nicht alle felder kopieren, sondern nur ein paar ausgewählte.
Du hast ja die Möglichkeit nach dem Kopieren aller Felder bestimmte Felder wieder zu löschen:
Delphi-Quellcode:
// alle Felder löschen die in der Liste übergeben wurden
procedure ClearDbFields(ds:TDataset; feldliste:array of string);
var
i : Integer;
f : TField;
begin
for i:=Low(feldliste) to High(feldliste) do
begin
f := ds.FindField(feldliste[i]);
if Assigned(f) then
f.Clear; // Set Field to NULL
end;
end;
Auf jeden Fall macht es Sinn deine Anforderung durch Benutzung von "Basisfunktionen" zu lösen, als nur eine Funktion zu haben, die Alles macht.
Delphi-Quellcode:
DuplicateCurrentRecord(aDataset); // zuerst alles kopieren
ClearDbFields(aDataset, ['Feld1', 'Feld2']); // dann das Löschen was nicht erwünscht ist
Du kannst auch das Property
Tag verwenden, um zwischen erwünschten und unerwünschten Feldern zu unterscheiden:
Delphi-Quellcode:
procedure ClearTaggedDbFields(ds:TDataset; mask:integer);
var
i : Integer;
f : TField;
begin
for i:=0 to ds.fields.Count-1 do
begin
f := ds.fields[i];
if (f.Tag and mask) <> 0 then
f.Clear;
end;
end;
Auf jeden Fall sind die hier gezeigten Funktionen wiederverwendbar und können so für jede Tabelle benützt werden.