zoukankan      html  css  js  c++  java
  • DATASNAP数据提交之FIREDAC的TFDJSONDeltas

    DATASNAP数据提交之FIREDAC的TFDJSONDeltas

    FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELTA的替代者出现的。

    TFDJSONDeltas是多个数据集DELTA的集合,一次性可以提交多个数据集修改后的数据到数据库。

    服务端代码:

    function TServerMethods1.SaveData2(const accountNo, tableName: string; delta: TFDJSONDeltas): Boolean;
    var
    d: TfrmDB;
    LApply: IFDJSONDeltasApplyUpdates;
    begin
    Result := False;
    if (accountNo = '') or (tableName = '') or (delta = nil) then
    Exit;
    d := GetDBPool(accountNo).Lock;
    if not Assigned(d) then
    Exit;
    try
    try
    SetTraceOn(d);
    d.qryOpen.Close;
    d.qryOpen.sql.Clear;
    d.qryOpen.sql.Text := 'select * from ' + tableName + ' where 1=2';
    d.qryOpen.Open;
    LApply := TFDJSONDeltasApplyUpdates.Create(delta);
    LApply.ApplyUpdates(0, d.qryOpen.Command);
    Result := LApply.Errors.Count = 0;
    except
    on e: Exception do
    begin
    Result := False;
    Log.WriteLog('TServerMethods1.SaveData2 ' + e.Message);
    end;
    end;
    finally
    d.qryOpen.Close;
    GetDBPool(accountNo).Unlock(d);
    SetTraceOff(d);
    end;
    end;

    客户端代码:

    procedure TForm1.btnSave2Click(Sender: TObject);
    var
    LDeltas: TFDJSONDeltas;
    begin
    if FDMemTable1.State in dsEditModes then // 向内存表提交修改
    FDMemTable1.Post
    else
    Exit;
    LDeltas := TFDJSONDeltas.Create;
    TFDJSONDeltasWriter.ListAdd(LDeltas, '1', FDMemTable1);
    if methods.SaveData2('0', 't1', LDeltas) then
    Self.Caption := 'save ok'
    else
    Self.Caption := 'save fail';
    end;

  • 相关阅读:
    Autoit对win系统弹窗的操作
    Linux服务器测试网络连通性
    如何给linux配置两个不同网段的ip
    记下看过并觉得非常有用的文章
    使用python+selenium对12306车票数据读取
    windows系统mysql安装
    Python使用正则匹配re实现eval计算器
    css3[补1]
    Javascript[2]
    Javascript[1]
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7468775.html
Copyright © 2011-2022 走看看