Hallo zusammen,
vor einiger Zeit habe ich in einem Projekt mit Master- und Detail Tables gearbeitet.
Zu dem Zeitpunkt war es so, dass Änderungen im Master- und den Detail Tables an die Datenbank übertragen wurden, wenn nur der Master Table gepostet wurde.
Nach einigen Monaten wollte ich jetzt an dem Projekt weiter arbeiten, zwischendurch haben sowohl Delphi, als auch FireDAC Updates stattgefunden und ich stelle fest, dass dieser Workflow so nicht mehr funktioniert.
Nun ist es für jeden Detail Table erfordelrich, dass dieser einzeln gepostet wird.
Hier mal ein paar genauere Versions Informationen:
Alte Versionen:
Delphi:
RAD Studio XE7
FireDAC: 6.0.0 (Build 88974)
Neue Versionen:
Delphi:
RAD Studio 10.2
FireDAC = 11.0.1 (Build 73709)
IndexFieldNames, MasterFields und MasterSource Properties sind in den Detail Tables korrekt eingestellt.
Ich habe, weil ich mittlerweile schon an mir selbst gezweifelt habe, das ganze nochmal in klein nachgebaut.
Eine einfach eAnwendung mit einer FDConnection und WaitCursor, zwei FDTables und zwei DataSourcen.
Es gibt einen Button, der neue Records hinzufügt und die Änderungen an die Datenbank überträgt.
Der Code des ButtonClicks sieht so aus:
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
begin
tbMaster.CachedUpdates := true;
tbDetail.CachedUpdates := true;
tbMaster.Append;
tbDetail.Append;
tbMaster.FieldByName('ID').AsString := Edit1.Text;
tbMaster.FieldByName('MASTER_INFO').AsString := 'master' + Edit1.Text;
tbDetail.FieldByName('MASTER_ID').AsString := Edit1.Text;
tbDetail.FieldByName('DETAIL_INFO').AsString := 'detail' + Edit1.Text;
tbMaster.ApplyUpdates;
tbMaster.CommitUpdates;
tbDetail.CommitUpdates;
tbMaster.CachedUpdates := false;
tbDetail.CachedUpdates := false;
end;
Mit den alten Versionen wird dabei alles gepostet, mit der gleichen Anwendung und den neuen Versionen wird nur der MasterTable gepostet.
Mir ist aufgefallen, dass mit den neuen Versionen tbDetail.Modified nach dem tbMaster.ApplyUpdates auch wieder false ist.
Hat da jemand eine Idee zu?
Gruß, Nils.