С Delphi 10 Seattle Я пытаюсь клонировать TFDQuery
с TFDMemTable
и сохранять изменения, внесенные в TFDMemTable
, в базу данных.Могут ли изменения, внесенные в TFDMemTable, клонированные из TFDQuery, отправляться обратно в базу данных?
Изменения в памяти появляются в запросе, но не проходят весь путь до БД. Если я изменяю значения в запросе напрямую, они сохраняются в базе данных.
var
query : TFDQuery;
memtable : TFDMemTable;
begin
{ run TFDQuery }
query := TFDQuery.Create(nil);
query.SQL.Text := 'select * from employee';
query.Open;
{ clone query into memtable }
memtable := TFDMemTable.Create(nil);
memtable.CloneCursor(query);
{ go to the same record in query and memtable }
memtable.First;
query.First;
Assert(memtable.Fields[0].Value = query.Fields[0].Value);
{ edit the record in the memtable from ABC to XYZ }
Assert(memtable['SomeField'] = 'ABC');
memtable.Edit;
memtable['SomeField'] := 'XYZ';
memtable.Post;
{ verify record also changed in query }
Assert(query['SomeField'] = 'XYZ');
{ has the change gone through to the database? }
query.Close;
query.Open;
query.First;
Assert(query['SomeField'] = 'XYZ'); // assertion fails, value is still ABC
В ApplyUpdates на TFDQuery должен делать свою работу. Можете ли вы поделиться кодом, когда вы его попробовали? –
Я думаю, что я, должно быть, сначала вызывал его как в MemTable, так и в Query. Первый вызов означал, что записи остались неизменными, а во втором - нет записей для обновления. – LachlanG