Hallo Smiley,
auch von mir alles Gute zu deinem Geburtstag.
Und noch ein paar Anmerkungen zu diesem Thread: Für das Duplizieren eines einzigen Datensatzes ist
SQL nicht erste Wahl, insbesondere wenn du den für den neuen Datensatz automatisch vergebenen Schlüssel benötigst. Was deine Datenmodellierung angeht, so hoffe ich einfach mal, dass dir jemand zum Geburtstag ein gutes Buch zu diesem Thema geschenkt hat.
Delphi-Quellcode:
function DuplicateRecord(
ds: TCustomADODataSet;
pkName: string;
pkValue: Variant; // null means current record
fieldNames: TStrings = nil // nil means no field restrictions
): Variant;
var
dsClone: TADODataSet;
f: TFields;
i: Integer;
begin
if not ds.IsEmpty
and ((pkValue = null) or ds.Locate(pkName, pkValue, [])) then
begin
dsClone := TADODataSet.Create(ds.Owner);
dsClone.Clone(ds);
f := ds.Fields;
ds.DisableControls;
try
ds.Insert;
for i := 0 to Pred(ds.FieldCount) do
if not SameText(f[i].FieldName, pkName)
and (not Assigned(fieldNames) or (fieldNames.IndexOf(f[i].FieldName) >= 0)) then
f[i].Value := dsClone.FieldByName(f[i].FieldName).Value;
ds.Post;
Result := ds.FieldByName(pkName).Value;
finally
ds.EnableControls;
dsClone.Free;
end;
end else Result := null;
end;
Freundliche Grüße