Hallo Uwe,
ich konnte jetzt nachstellen das die Ursache wie du schon sagtest nicht CopyDataSet ist sondern FireDac und dessen
Query.
Ich habe in meinem Code nachgeschaut wo ich CopyDataSet verwende.
Es ist immer so das ich ein DataSet über einen DataSnap Server bekomme
und diesen in einer MemTable oder direkt verarbeite. Ich schreibe
also nie über die
Query in die
DB. Deshalb hat es bis jetzt funktioniert.
Dass die
Query mein übergebener PK einfach ignoriert war mir nicht
klar. Ich habe all die Jahre IBO verwendet und da ist es nicht so.
Wenn ich ein PK(AutoInc) Feld ein Wert übergebe, wird dieser auch zur
Datenbank transportiert, ansonsten feuert er selbst den Generator
unmittelbar vor dem Schrieben in die
DB.
Das war jetzt für mich eine sehr sehr wichtige Lehrstunde.
Tausend Dank nochmals Uwe.
Delphi-Quellcode:
function TForm1.MyCopyDataSet(Qu,Zi:TFDQuery):Boolean;
var n:Integer;
begin
Qu.First;
while not Qu.Eof do
begin
Zi.Insert;
for n:=0 to Qu.FieldCount-1 do
begin
Zi.FieldByName(Qu.Fields[n].FieldName).value := Qu.Fields[n].value;
end;
Zi.Post;
Qu.next;
end;
result:=true;
end;