mit folgender Funktion kann der aktuelle Datensatz als Kopie
eingefügt werden:
Delphi-Quellcode:
procedure DuplicateCurrentRecord(aDataSet : TDataSet);
var
Data : array of variant;
aRecord : array of TVarRec;
i : integer;
max : integer;
begin
max := aDataSet.fields.count -1;
// set the lenghth of the arecord array to be the same as the number of
// elements in the data array
SetLength(arecord,max+1);
SetLength(data,max+1);
// set the variant type pointers to the data array
for i := 0 to max do
begin
arecord[i].VType := vtVariant;
arecord[i].VVariant := @data[i];
end;
// Copy the Record to the Array
for i := 0 to max do
Data[i] := aDataSet.fields[i].value;
aDataSet.Append;
aDataSet.SetFields(aRecord);
end;
Das Dataset befindet sich jetzt im Einfügemode (dsInsert).
Das Programm oder der Benutzer muss nun zumindest das
Primärschlüsselfeld abändern, sonst kann der Datensatz nicht gepostet werden.
Hier ein Beispiel:
Delphi-Quellcode:
begin
DuplicateCurrentRecord(Table1);
Table1['Kundennr'] := Table1['Kundennr']+'b'; // Primärschlüsselfeld ändern
Table1.Post; // Datensatz posten
end;
[edit=Matze]Code formatiert. Mfg, Matze[/edit]