如何从 TFDJSONDeltas 获取增量数据集以动态创建服务器端 UpdateSQL 命令

How to get delta dataset from TFDJSONDeltas for creating server side UpdateSQL command dynamically

我正在使用 Delphi DataSnap REST 应用程序进行测试。使用向导,我可以获得在服务器和客户端之间运行应用程序的良好起点。 程序代码显示在这里。

procedure TServerMethodsMain.ApplyDataSetChanges(const ATableName: String;
                                                     const ADeltaList: TFDJSONDeltas);
    var
      LApply: IFDJSONDeltasApplyUpdates;
    begin
      LApply := TFDJSONDeltasApplyUpdates.Create(ADeltaList);

      DataModule1.FDQuery1.UpdateOptions.UpdateTableName := ATableName;

      LApply.ApplyUpdates(ATableName, DataModule1.FDQuery1.Command);

      if LApply.Errors.Count > 0 then
        raise Exception.Create(LApply.Errors.Strings.Text);
    end;

现在有一个关于服务器端数据更新的问题:

所有字段值将一起更新,所有 OLDVALUE 将用作识别原始记录的参考。因此,如果另一位用户更改了同一记录中的一个或多个值,客户端应用程序将生成错误。

我想知道如何从 TFDJSONDeltas 获取增量记录。如果是这样,将有可能创建仅具有修改值的更新 SQL。而且,记录只能用primary/key字段来识别。

谢谢。

FireDAC 完全有能力生成您想要的 SQL 更新。它有很多选择!

指定 FDQuery1.UpdateOptions.KeyFields 属性 并将 FDQuery1.UpdateOptions.UpdateMode 保留为默认值 upWhereKeyOnly。

此外,Delphi 附带大量 FireDAC 样本。