Ist die 'id' in dem Statement enthalten?
Result := Format('INSERT INTO %s (%s) VALUES (%s)',[ClassToTableName(cl),fields,values]);
Wenn ja, stelle sicher, dass dem nicht so ist.
Weiß nicht, wie sich
MySQL verhält, wenn man für ein Auto-Increment-Feld einen Wert liefert. Nimmt es auf jeden Fall einen eigenen neuen Wert oder übernimmt
MySQL dann den "gelieferten" Wert?
Wenn ich Deinen Quelltext richtig verstehe, sollte forceId auf jeden Fall false sein oder für die ID explizit Null geliefert werden.
So in der Art:
Delphi-Quellcode:
if forceId then begin
fields := fields + sep + '`' + prop.Name + '`';
values := values + sep + 'Null';
end;