Ошибка FDJSONDeltasApplyUpdates с запросом на два соединения

Я делаю тест с приложением Delphi DataSnap REST. Я попробовал этот учебник из Embarcadero, и он работает для простой таблицы и один SQL-запрос соединения.

// образец простой таблицы

V001.SQL.Text := 'Select * from T001 where K010=:XK010';

// один запрос на соединение

V001.SQL.Text := 
    'SELECT T001.K001 AS K001, T001.K010 AS K010, '
+ 'T001.F001 AS F001, T010.F001 AS F002 '

+ 'T001.F001 AS F001, T010.F001 AS F002 '

+ 'FROM T001 LEFT JOIN T010 ON T001.K010 = T010.K010 '

+ 'WHERE T001.K010=:XK010 '

+ 'ORDER BY T001.F001';

Теперь я начинаю пробовать этот пример с двумя запросами на объединение и получаю ошибку в процедуре ApplyUpdates.

// two joins query
V001.SQL.Text :=
'SELECT T001.K001 AS K001, T010.F002 AS T010F002, '
+ 'T016.F002 AS T016F002, '
+ 'T001.F001 AS F001, T001.K010 AS K010, T001.K016 AS K016 '
+ 'FROM ((T001 LEFT JOIN T010 ON T001.K010 = T010.K010) '
+ '     LEFT JOIN T016 ON T001.K016 = T016.K016) '
+ 'WHERE T001.K010=:XK010 '
+ 'ORDER BY T001.F001';


procedure TServerMethods1.ApplyChangesSupplierProduct(const ADeltaList: TFDJSONDeltas);
var
LApply: IFDJSONDeltasApplyUpdates;
sText: String;
begin
// Create the apply object
LApply := TFDJSONDeltasApplyUpdates.Create(ADeltaList);
// Apply the supplier delta
LApply.ApplyUpdates(myJoinQuery, V001.Command);
if LApply.Errors.Count > 0 then
    // Raise an exception if any errors.
raise Exception.Create(LApply.Errors.Strings.Text);
end;

В моем примере SQL с двумя соединениями, показанном выше, ошибка возникает в строке LApply.ApplyUpdates(myJoinQuery, V001.Command).

Пожалуйста, дайте мне несколько советов о том, как получить эту работу или мне нужно подготовить V001.Command самостоятельно и как.

Заранее спасибо.


person James    schedule 23.09.2017    source источник
comment
Какую ошибку вы получаете?   -  person John Easley    schedule 23.09.2017
comment
Позвольте мне получить эту ошибку.   -  person James    schedule 27.09.2017
comment
Спасибо за помощь, Джон. Сообщение об ошибке: [FireDAC][Phys]-330. Не удается сгенерировать запрос на обновление. Обновление таблицы не определено.   -  person James    schedule 27.09.2017
comment
См. этот вопрос stackoverflow.com/ вопросов/24497288/ Кажется, это вызвано использованием полей псевдонимов, но есть ответ.. используйте CnPack, чтобы установить для полей псевдонимов настоящие имена полей..   -  person John Easley    schedule 27.09.2017
comment
Спасибо, Джон. Я изучу этот случай и найду, смогу ли я решить свою проблему.   -  person James    schedule 28.09.2017
comment
Проблема решена. Просто добавьте одну строку перед ApplyUpdates: V001.UpdateOptions.UpdateTableName := 'T001'; Это решение относится к stackoverflow.com/questions/31163136/ . Спасибо за ответ Сезара Ромеро в этой теме.   -  person James    schedule 28.09.2017